设计模式小结
2015-11-08 11:24
162 查看
设计模式的分类
创建型具体有:工厂方法,抽象工厂,创建者,原型,单例
作用:创建实例对象时(为了调用其中的方法),不由使用者直接创建,而是由工厂创建,后续使用者要是用别的类,向工厂提出更改即可。就好比:手机生产商生产手机,但是,一些零件并不是自己生产,而是由别的工厂生产,但本公司设计人员修改手机实际,比如电池的尺寸变化了,则只需要向电池提供商要求提供新尺寸的电池即可,自己的生产线并不需要修改。
结构型
具体有:适配器,桥接,组合,装饰,外观,享元,代理
作用:用于将多个对象组成更大的结构
行为型
具体有:解释器,模板方法,责任链,命令,迭代器,中介者,备忘录,观察者,状态,策略,访问者
作用:用于帮助系统间各对象的通信,以及如何控制复杂系统的流程
常见设计模式代码分析
单例模式代码如下:参照jiyanfeng1的“只能实例化一次的类 (Singleton)”如有侵权,请及时联系我,我将立即删除相关内容
#include<iostream> using namespace std; class CSingleton { public: static CSingleton* GetInstance() { if(m_pInstance==NULL) //对象是否已被创建 m_pInstance =new CSingleton(); return m_pInstance; } protected: CSingleton() { cout<<"CSingleton"<<endl; }; CSingleton(CSingleton& other) //重载拷贝构造函数 { } //重载赋值构造函数,但貌似是没必要的,因为对象无法在外部先被创建 CSingleton& operator =(const CSingleton& other) { }; static CSingleton* m_pInstance; }; CSingleton* CSingleton::m_pInstance=NULL;//定义static变量 int main() { CSingleton* a=CSingleton::GetInstance(); CSingleton* b; b=a;//a和b指向同一个对象 //CSingleton b=*a,无法被创建,拷贝构造函数已经定义为protected return 0; }
关于这段代码还有一些疑问,有人指出赋值函数也要重载,但上述代码,第一次返回对象的指针,调用的应该就不是赋值函数。对象无法在外部创建,也就用不到赋值函数。这点个人还是不是很明白。此外,这里是返回对象的指针,如果GetInstance()直接返回对象,应该如何确保只实例化一个呢?
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例