设计模式单例模式

Posted 王思琪^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式单例模式相关的知识,希望对你有一定的参考价值。

前提

使用单例模式需有一下三点:

  • 要有一个自己的私有类型的变量
  • 要有一个私有的构造函数
  • 全局访问点(static)

一、什么是单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。UML如下:

其中,Singleton类,定义了一个GetInstance操作,允许客户访问它的唯一实例,GetInstance是一个静态方法,主要负责创建自己的唯一实例

1、Singleton类

class Singleton
    
        private static Singleton instance;

        //构造方法让其private,这就堵死了外界利用new创建此类型实例的可能
        private Singleton()  
        public static Singleton GetInstance() //此方法是获得本类实例的唯一全局访问点
        
            if (instance==null) //如果实例不存在,则new一个新实例,否则返回已有的实例
            
                instance = new Singleton();
            
            return instance;
        
    

2、客户端

static void Main(string[]args)
        
            Singleton s1 = Singleton.GetInstance();
            Singleton s2 = Singleton.GetInstance();

            //比较两次实例化后对象的结果是实例相同
            if (s1==s2)
            
                Console.WriteLine("两个对象是相同的实例");
            
            Console.Read();
        

运行上述程序,程序台输出了“两个对象是相同的实例”,这说明Singleton1和Singleton2是相同的实例,也即一个类仅有一个实例。

二、单例模式的应用

1、什么时候使用单例模式

想要控制实例数目,节省系统资源的时候

2、优点

  • 内存中只有一个实例,减少了内存开支
  • 避免了对资源的多重占用

3、缺点

  • 没有抽象层,扩展困难
  • 与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化

4、使用场景

根据业务的需要来决定用不用单例模式

5、注意

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

 

以上是关于设计模式单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式

1. 单例模式

单例模式优缺点

单例模式

17单例模式

创建型设计模式 之 单例模式