单例模式:即一个类只有一个实例,在类里自己创建自己的实例。
优点:
(1)单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
(2)因为类控制了实例化过程,所以类可以灵活更改实例化过程。尤其是在C++中,每次new都要delete,而是用单例模式可以避免忘记delete造成的内存泄漏,只在本类的内部delete实例就可以了
(3)方便对实例进行管理,减少重复的代码,减少内存开销
缺点:
(1)应为内部实例化的对象为静态全局变量,因此没有接口,不能继承
(2)与单一职责原则(这个之后会做详细介绍)冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
该模式可以应用在很多编程语言上,这里以C#为例
//单例模式的一般实现
public class TxtManager
{
//私有对象记录唯一实例
private static TxtManager instance;
//让构造函数为 private,这样该类就不会被实例化
private TxtManager(){}
//获取唯一可用的对象的公有方法
public static TxtManager getInstance()
{
if(null == instance)
{
instance = new TxtManager();
}
return instance;
}
}
//调用
public class SingleDemo
{
//编译时错误:构造函数 SingleObject() 是不可见的
//SingleObject object = new SingleObject();
//获取唯一可用的对象
TxtManager object = TxtManager.getInstance();
}