zoukankan      html  css  js  c++  java
  • c#单例模式

    单例(Singleton)模式

    单例模式的特点:

    • 单例类只能有一个实例。
    • 单例类必须自己创建自己的唯一实例。
    • 单例类必须给所有其它对象提供这一实例。

    单例模式应用:

    • 每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。
    • 一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键编号。否则会出现主键重复。

    单例模式三种写法:

    第一种最简单,但没有考虑线程安全,在多线程时可能会出问题

    public class Singleton
    {
        private static Singleton _instance = null;
        private Singleton(){}
        public static Singleton CreateInstance()
        {
            if(_instance == null)

            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }

    第二种考虑了线程安全

    public class Singleton
    {
        private volatile static Singleton _instance = null;
        private static readonly object lockHelper = new object();
        private Singleton(){}
        public static Singleton CreateInstance()
        {
            if(_instance == null)
            {
                lock(lockHelper)
                {
                    if(_instance == null)
                         _instance = new Singleton();
                }
            }
            return _instance;
        }
    }

    第三种可能是C#这样的高级语言特有的,实在懒得出奇

    public class Singleton
    {

        private Singleton(){}
        public static readonly Singleton instance = new Singleton();
    }  

     Singleton模式的结构:

    Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。(关于线程问题以及C#所特有的Singleton将在后面详细论述)。

  • 相关阅读:
    LeetCode_167. Two Sum II
    LeetCode_160. Intersection of Two Linked Lists
    LeetCode_155. Min Stack
    LeetCode_141. Linked List Cycle
    LeetCode_136. Single Number
    LeetCode_125. Valid Palindrome
    HTML解析类 ,让你不使用正则也能轻松获取HTML相关元素 -C# .NET
    .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类
    将form表单元素转为实体对象 或集合 -ASP.NET C#
    ASP.NET 图片上传工具类 upload image简单好用功能齐全
  • 原文地址:https://www.cnblogs.com/HKKD/p/7112405.html
Copyright © 2011-2022 走看看