小弟在以前的文章(平台整合系列)中提到了设计模式,设计模式到底是个什么东西,有什么用途呢?小弟打算在该系列中理论联系实际介绍下设计模式的前世今生,用途意义。小弟在这里主要讲解在C++开发中遇见的或者运用到的。
一、两段简单的代码:
代码段一:
struct SUser
{
CString strUserID ;
int nAge ;
SUser()
{
strSystemID = _T("");
nAge = 0 ;
}
~SUser()
{
}
SUser(const SUser& other)
{
*this = other;
}
SUser& operator = (const SUser& other)
{
strUserID = other.strUserID;
nAge= other.nAge;
return *this;
};
};
代码段二:
class CUser
{
public:
CUser() ;
CUser(const CUser& user) ;
~CUser() ;
CUser* Clone() const { return new CUser(*this);};
private:
CString strUserID ;
int nAge ;
}
二、两段代码的简单解说:
代码段一 是我们熟悉的C中的结构体定义,不仅定义了结构体内部成员,还定义了结构的operator=重载。
代码段二是我们熟悉的C++的类定义,不仅定义了构造函数和属性还定义copy constructor方法。
三、涉及到的设计模式:
这个的设计模式就是传说中的 原型模式 (Prototype pattern)。结构图如下:
简单解析:ConcretePrototype子类通过拷贝构造函数(位拷贝)或者包括指针、复合对象的拷贝(值拷贝)为Client类提供Prototype操作对象。
Prototype模式通过复制原型(Prototype)而获得新对象创建,即Prototype本身就是对象工程,跟AbstractFactory(抽象工厂模式)的区别就在于它是再不断的复制自己制造出新对象。
四、知识点扩充透析:
浅层拷贝跟深层拷贝。
浅层拷贝(位拷贝):浅层拷贝是指地址的复制,是指将一个对象的内存映像按位原封不动的复制给另一个对象,所有创建出来的对象所指的内存都是同一块地址。典型的例子就是代码片段二,copy constructor拷贝构造函数。
深层拷贝(值拷贝):深层拷贝是指值的复制,是将一个对象的内存内容原封不动的复制到另一块内存中,所有创建出来的对象都有自己独立的内存块。典型的例子就是代码片段一中的copy constructor加上operator=。
五、总结:
小弟用直白的话做一个总结:原型模式 就完成了自己的裂变,一个自己变出无数个自己。无数个自己如果是影子那就是浅层拷贝得到的,要是价真货实那就是深层拷贝过。
小弟还打算在后续的博客中继续用平常心去聊聊发布订阅者模式,适配器模式等等。