1. Singleton的实现:Singleton不可以被实例化,因此将其构造函数声明为protected或者直接声明private。
2. Singleton模式经常和Factory(AbstractFactory)模式在一起使用,因为系统中工厂对象一般来说只要一个。
3. 通过维护一个static的成员变量来记录这个唯一的对象实例,通过提供一个static的借口Instance来获得这个唯一的实例。
如下简单示例:
class Singleton
{
public:
static Singleton *Instance();
void print();
protected:
Singleton();
private:
static Singleton * _instance;
};
Singleton *Singleton::_instance=0;
Singleton::Singleton()
{
cout<<"Singleton..."<<endl;
}
Singleton *Singleton::Instance()
{
if(_instance==0)
{
_instance=new Singleton();
}
return _instance;
}
void Singleton::print()
{
cout<<this<<endl;
}
int main(int argc, char* argv[])
{
Singleton *sgn=Singleton::Instance();
sgn->print();
Singleton::Instance()->print();
//Singleton st; //'Singleton::Singleton' : cannot access protected member declared in class 'Singleton'
return 0;
}
输出如下:
Singleton...
001D2AB8
001D2AB8
转自c++设计模式。