常见设计模式之单例模式
//: C10:CuriousSingleton.cpp // Separates a class from its Singleton-ness (almost). #include <iostream> using namespace std; template<class T> class Singleton { Singleton(const Singleton&); Singleton& operator=(const Singleton&); protected: Singleton() {} virtual ~Singleton() {} public: static T& instance() { static T theInstance; return theInstance; } }; // A sample class to be made into a Singleton class MyClass : public Singleton<MyClass> { int x; protected: friend class Singleton<MyClass>; MyClass() { x = 0; } public: void setValue(int n) { x = n; } int getValue() const { return x; } }; int main() { MyClass& m = MyClass::instance(); cout << m.getValue() << endl; m.setValue(1); cout << m.getValue() << endl; return 0; } ///:~
步骤:
MyClass is made a Singleton by: 1. Making its constructor private or protected. 构造函数受保护 2. Making Singleton<MyClass> a friend. 授权访问受保护的构造 3. Deriving MyClass from Singleton<MyClass>. 继承
内容源自:《TICPP-2nd-ed-Vol-two》