设计模式单例模式
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、注意
- 单例类只能有一个实例
- 单例类必须自己创建自己的唯一实例
- 单例类必须给所有其他对象提供这一实例
以上是关于设计模式单例模式的主要内容,如果未能解决你的问题,请参考以下文章