比如,windows下的任务管理器界面,即使未关闭当前界面,重新启动任务管理器,目前显示的仅有一个,和之前未关闭的为同一个界面。
抽象来说:一个类中只能实例出一个对象。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,如果希望系统中某个类的对象只有一个,则会用到单例模式。
实现方法:(1)该类禁止别人new出来,或者通过直接定义一个对象出来,所以将默认构造函数和拷贝构造函数设计为私有;(2)单例类内定义一个单例类型的静态对象Singleton,并设置为私有,以防外部修改;(3)提供外部访问接口,维护一个静态的getInstance()方法。
1 class Person{ 2 private: 3 Person(){}; 4 Person(const Person&){}; 5 6 static Person *Singleton; //静态变量,类内声明,类外初始化, 初始化时不用static,需指定作用域 7 8 public: 9 static Person *getInstance(){ 10 return Singleton; 11 } 12 }; 13 14 Person *Person::Singleton = new Person; 15 16 void test01(){ 17 18 Person::getInstance();//外部通过接口访问单例 19 Person *p = Person::getInstance(); 20 Person *p1 = Person::getInstance(); 21 22 //-------------- 23 //不能直接定义或new实例,只能通过调用接口 24 //Person p2; 25 //Person *p1 = new(*p); //这里调用拷贝构造函数 26 //-------------- 27 28 if (p == p1){ 29 cout << "两个单例的地址相同,为同一个单例" << endl; 30 } 31 32 }