计划生育之单例模式学习笔记[C++版]
2009-12-12 16:12
501 查看
/************************************************************************ * 单例模式学习笔记[C++] * Author: 陈相礼 * Time: 2009.12.10 * Compiler: VC8 ************************************************************************/ #include "SingletonPattern.h" #include "SingletonPattern1.h" #include <iostream> using namespace std; CSingleton *CSingleton::mp_instance = 0; CCouple *CCouple::mp_child = 0; int main() { //------------------单例模式原理类测试------------------- CSingleton *s1 = CSingleton::GetInstance(); CSingleton *s2 = CSingleton::GetInstance(); if ( s1 == s2 ) { cout << "两个对象相同的实例!" << endl; } //------------------计划生育类测试一------------------- CCouple *cp1 = CCouple::GetInstance(); cp1->vBorn(); CCouple *cp2 = CCouple::GetInstance(); if ( cp1 == cp2 ) { cout << "两者指向同一对夫妇~~~" << endl; } return 0; } /************************************************************************ * 总结: * 虽然说单例模式比较简单、应用比较广泛,但是在考虑的时候,细节还是很 * 多的。目前如果使用静态的成员变量指针,存在的问题是,何时去释放?如何 * 通知其它地方已经被释放?还有如何防止CSingleton类被其它类继承的问题? * 这些都比较纠结?谁能给个解决方法,谢谢了~~~ ************************************************************************/
#pragma once /********************************************** * 单例模式原理: * 保证一个类仅有一个实例,并提供一个访问它的全 * 局访问点。 * 通常我们可以让一个全局变量使得一个对象被访问 * 就,但它不能防止你实例化多个对象。一个最好的办 * 法是让类自身负责保存它的唯一实例。这个类可以保 * 证没有其它实例可以被创建,并且它可以提供一个访 * 问该实例的方法。 ***********************************************/ #include <iostream> using namespace std; //--------------------------------------------- // CSingleton类 // 定义一个GetInstance操作,允许客户访问它的唯 // 一实例。GetInstance 是静态方法,主要负责创建 // 自己的唯一实例 class CSingleton { public: // 若实例不存在则创建一个实例,否则返回已有的实例 static CSingleton* GetInstance( void ) { // 多线程时加锁,双重锁定 //if ( NULL == mp_instance ) //{ // lock() // { if ( NULL == mp_instance ) { mp_instance = new CSingleton(); } // } //} return mp_instance; } protected: private: // 构造方法为私有,阻止外界利用new创建此类实例的可能 CSingleton(){}; // 声明为静态 static CSingleton *mp_instance; class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例 { public: ~CGarbo() { if (CSingleton::mp_instance) { delete CSingleton::mp_instance; CSingleton::mp_instance = NULL; cout << "删除" << endl; } } }; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数 static CGarbo Garbo; };
#pragma once /******************************** * * 单例模式应用:计划生育 * ********************************/ #include <iostream> using namespace std; // 夫妇类 class CCouple { public: void vBorn() { cout << "小孩呱呱坠地~~~" << endl; } // 生育审核 static CCouple * GetInstance() { if ( NULL == mp_child ) { mp_child = new CCouple(); cout << "准生!" << endl; } else { cout << "⊙﹏⊙b汗,已经有一个孩子了,不能再生了!" << endl; } return mp_child; } protected: private: static CCouple *mp_child; // 定义为私有,则由夫妇双方判断有没有必要计划生育 CCouple() { cout << "新婚夫妇~~~" << endl; }; ~CCouple() { if ( NULL != mp_child ) { delete(mp_child); mp_child = NULL; } } };
相关文章推荐
- 计划生育之单例模式学习笔记[C++版]
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
- C++学习笔记-后台服务程序开发模式
- C++学习笔记(二十五)设计模式概述
- C++学习笔记(三十)建造者模式
- C++设计模式学习笔记六:原型模式
- boolan——c++学习笔记之设计模式一
- 设计模式C++学习笔记之三(Singleton单例模式)
- 设计模式C++学习笔记之十(Builder建造者模式)
- C++学习笔记 模板 包含编译模式 分别编译模式
- 设计模式C++学习笔记之四(Multition多例模式)
- 设计模式C++学习笔记之十八(Visitor访问者模式)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式C++学习笔记之十六(Observer观察者模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式C++学习笔记之十八(Visitor访问者模式)
- 设计模式C++学习笔记之三(Singleton单例模式)