zoukankan      html  css  js  c++  java
  • 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中,一个窗体就是一个类。进行弹窗时,每次就只能弹出同一个窗体

    使用单例模式时:

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

  • 相关阅读:
    linux安装git
    安装tidb数据库
    docker的简单操作和端口映射
    zabbix的简单操作(查看监控,自定义监控和钉钉监控报警)
    zabbix简单的操作(添加主机)
    LINQ 函数的实战演练测试
    C#基础:LINQ 查询函数整理
    C#中的LINQ
    C#高级编程笔记 2016年10月26日 MVC入门 Controller
    委托、Lambda表达式和事件
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/4559242.html
Copyright © 2011-2022 走看看