1.单例模式
单例模式,又叫单体模式,是设计模式中很重要的一个模式。单例模式的实现很简单,就提供一个只有一个实例的类,从而让所有访问此类的,只能操作单一的实体,而不是另外的实体。
单例模式,在设计模式中很重要。因为,这种模式,可以提供一种唯一的访问方式,这种方式,是很多程序中需要的。
2.单例模式的作用和实现
单例的模式的作用:
1)对外提供一个全局的访问点;
2)保证只能有一个可访问的实体;
3)让本程序中,所有的操作只是对一个实体的操作。
单例模式的实现:
1)让整个类的构造函数私有,使外部不可以构造实体;
2)一个属于全体类的静态变量,判断整个类是否实例化;
3)提供给外部一个实例化的接口,可以获得实例;外部没有实例化时,调用构造函数构造;但如果已经构造,只能提供已经构造的实例。
3.单例模式的不同语言特点和注意
在不同语言中和不同实现中,单例模式需要注意一些特点:
1)在C++中,对单例仅仅保证构造函数的私有,可能还不够;应该把拷贝构造和等号操作符也设置为私有;
2)在JS中,单例是最常见的模式;
3)多线程(多任务)情况下,如果还是原来的单例模式,可能会造成不是单例;一般会采用饿汉式方式(类构造时生成)或者懒汉式(类调用时生成,但加上锁保证同步)。
4.单例模式样例
单体模式的懒汉式实现如下:
https://github.com/diziqian/DesignPattern/tree/master/SingletonPattern/LazySingletonPattern
单体模式饿汉式实现如下:
https://github.com/diziqian/DesignPattern/tree/master/SingletonPattern/HungrySingletonPattern
PS:也不得不佩服下JAVA,任务同步只需要一个关键字就行,而C++的同步,必须加上各种方法,幸亏C++11提供了比较便捷的同步的方法。