• C#面向对象设计模式学习笔记(1) Singleton 单件模式(创建型模式)


    Singleton 单件模式

    保证一个类只有一个实例,并提供一个该实例的全局访问点。

    核心是如何控制用户使用new对一个类的实力构造器的任意调用。

    1、单线程Singleton模式实现

    代码
    public class Singleton
    {
    //private static Singleton instance = new Singleton(); //不进行延时加载
    private static Singleton instance;
    private Singleton() { } //构造器
    public static Singleton Instance
    {
    get
    {
    if (instance == null)
    {
    instance
    = new Singleton();
    }
    return instance;
    }
    }
    }

    public class Test
    {
    public static void Main()
    {
    Singleton t1
    = Singleton.Instance;
    Singleton t2
    = Singleton.Instance;
    Console.WriteLine(Object.ReferenceEquals(t1, t2)
    == true);
    }
    }

    2、多线程Singleton模式实现

    代码
    public class Singleton
    {
    private static volatile Singleton instance = null; //“volatile”用于保证代码执行顺序不被编译器调整
    private static object lockHelper = new Object();
    private Singleton() { }
    public static Singleton Instance
    {
    get
    {
    if (instance == null)
    {
    lock (lockHelper)
    {
    if (instance == null)
    {
    instance
    = new Singleton();
    }
    }
    }
    return instance;
    }
    }
    }

    3、使用静态构造器实现

    特点:多线程、延时加载都能保证,但是不能传参数,如果需要传参数,可以附加属性或方法实现。

    实际项目中比较推荐的做法

    代码
    public class Singleton
    {
    public static readonly Singleton Instance = new Singleton();
    private Singleton() { }
    }
    public class Singleton
    {
    public static readonly Singleton Instance;
    static Singleton()//静态构造器
    {
    Instance
    = new Singleton();
    }
    private Singleton() { }
    }

  • 相关阅读:
    直接拿来用 九个超实用的PHP代码片段(二)
    微信开发值得推荐的开源项目
    PHP文件下载原理
    简化PHP开发的10个工具
    CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
    fir.im Weekly
    fir.im Weekly
    fir.im Weekly
    用 flow.ci 让 Hexo 持续部署
    fir.im Weekly
  • 原文地址:https://www.cnblogs.com/vengen/p/Patterns_01.html
Copyright © 2020-2023  润新知