• C#设计模式--单例模式(创建型模式)


    一.单例模式介绍:

    注:单例模式是最简单的模式,也是很重要的模式

    1. 有的类在系统中只能有一个对象(*,资源管理器、缓存管理器等),这时就要使用“单例模式”(singleton)。
    2. 单例模式的三个要点:
        • 某个类只能有一个实例
        • 它必须自行创建这个实例
        • 它必须自行向整个系统提供这个实例
    具体实现角度来说,就是以下三点:
        • 单例模式的类只提供私有的构造函数
        • 类定义中含有一个该类的静态私有对象
        • 该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象

     二.单例模式写法:

      • 最简单的写法,没有考虑线程安全。多线程中可能会出现问题:
    public class Singleton
    {
        private static Singleton _instance = null;
        private Singleton() 
        {
            Console.WriteLine("初始化,避免外界调用");
        }
        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();
        public static Singleton GetInstance()
        {
            return instance;
        }
    }  
    单例模式(常用写法)

    三.单利模式的应用:

    • 每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。
    • 在winform中,一个窗体就是一个类。进行弹窗时,每次就只能弹出同一个窗体

    使用单例模式时:

      在一个系统要求一个类只有一个实例时才应当使用单例模式

  • 相关阅读:
    需要学习的技术
    Building wheel for uwsgi (setup.py) ... error 解决问题
    version `ZLIB_1.2.3.4‘ not found 解决方法
    module 'tensorflow' has no attribute 'space_to_depth'(已解决)
    python语法—命名元祖、偏函数
    python—set集合比较(交集、并集,差集)
    websocket接口测试
    linux根目录扩容方法
    django—问题—中文编码格式报错 、分页warning
    python—使用sorted对字典进行排序
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/4559242.html
Copyright © 2020-2023  润新知