当前位置: 首页 > 编程笔记 >

Design patterns 单例(C#)

姜玉泽
2023-03-14
本文向大家介绍Design patterns 单例(C#),包括了Design patterns 单例(C#)的使用技巧和注意事项,需要的朋友参考一下

示例

单例用于确保仅创建对象的一个实例。单例仅允许创建其自身的单个实例,这意味着它将控制其创建。单例是“四人帮”设计模式之一,是一种创造模式

线程安全的单例模式

public sealed class Singleton
{
    private static Singleton _instance;
    private static object _lock = new object();
 
    private Singleton()
    {
    }
 
    public static Singleton GetSingleton()
    {
        if (_instance == null)
        {
             CreateSingleton();
        }

        return _instance;
    }

    private static void CreateSingleton()
    {
        lock (_lock )
        {
            if (_instance == null)
            {
                 _instance = new Singleton();
            }
        }
    }
}

Jon Skeet为惰性,线程安全的单例提供以下实现:

public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy =
        new Lazy<Singleton>(() => new Singleton());
    
    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton()
    {
    }
}
           

 类似资料:
  • 问题内容: 设计可能引发异常的单例类的最佳方法是什么? 在这里,我有一个Singleton(使用Bill Pugh的方法,在Wiki中为Singleton记录)。 如果在2处引发异常,我想将其传播给调用方。但是,我不能从第1行引发异常。 因此,如果单例对象创建不正确,我唯一的选择是返回空对象吗? 谢谢 PS我确实意识到,如果该Singleton通过不同的类加载器加载或反射加载,则可能会损坏,但是对

  • 单例模式的定义 确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例。 方法一: static Singleton *getInstance() { static Singleton locla_s; return &locla_s; } 该代码可能在c++11之前的版本导致多次构造函数的调用,所以只能在较新的编译器上使用。 方法二:

  • 单例准备好的语句会比每次创建一个语句更好吗?

  • 我试图实现双重检查,但得到这个错误。 } 方法GetSingletonInstance的非法修饰符;只允许public,protected,private,abstract,static,final,synchronized,native和

  • 引用test.nsi的内容: ;Sendmessage简单例子 ;WWW.Dreams8.CoM ; !include "WinMessages.nsh" !include "LogicLib.nsh" name "Sendmessage简单例子" outfile "test.exe" page custom show leave reservefile "pagecustom.ini"

  • 问题内容: 就像我之前的问题一样,该问题引用了 Effective Java 。这次,我有很多子问题。 特权客户端可以借助该方法以反射方式调用私有构造函数。如果需要对此进行防御,请修改构造函数。 究竟如何调用私有构造函数?那是什么? 您的专家对单身人士采取什么方法? 如果我们每次都要检查新实例还是每次都检查同一个实例,第二种方法难道不是更灵活吗? 如果我尝试克隆类/对象怎么办? 单元素枚举类型是实