您的位置:首页 > 其它

设计模式小结

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()直接返回对象,应该如何确保只实例化一个呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式