引:c++ 单件模式解耦应用
基于之前单实例解耦的体悟,在应用中进行了简单的实践,但是发现一个问题,多个类的情况下,能否让一个基类来完成单件的功能呢?于是有了下面的这个实践。
// 单实例基类.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #define creatT(T) new T(); template<typename T> class Singleton { public: static T* pt; static T* getMy() { if (pt == NULL) { //pt = creatT(T) pt = new T(); } return pt; } }; class B :Singleton<B> { public: B() { ma = 0; } int ma; int fun(int a) { ma++; return a * 2; } }; B* Singleton<B>::pt = NULL; class C :Singleton<C> { public: C() { ma = 0; } int ma; int fun(int a) { ma++; return a * 2; } }; C* Singleton<C>::pt = NULL; int main() { std::cout << "Hello World!\n"; int a = Singleton<B>::getMy()->fun(1); a = Singleton<B>::getMy()->fun(2); std::cout << a<<"\n"; //B的成员是2证明只创建一个B的实例 std::cout <<"B的成员:" << Singleton<B>::getMy()->ma<<"\n"; // B的成员和C的成员不同证明创建了两种类型的实例 std::cout<<"C的成员:" << Singleton<C>::getMy()->ma << "\n"; }