以下是我自己学习设计模式的感想。
原型模式
学过C++的都知道拷贝构造函数,复制一个对象分为浅拷贝和深拷贝。
浅拷贝:就是给对象中的每个成员变量进行复制,就是把A1类中的变量直接赋给A2类中变量,属于值传递,但是涉及到有new之类内存分配的地方,他们却是共享内存的。
深拷贝:就是不仅使用值传递,而是要每个变量都有自己一份独立的内存空间,互不干扰。
默认的拷贝构造函数是浅拷贝的,如果要实现深拷贝,就需要重写拷贝构造函数T(const T&)。
既然有了拷贝构造函数,还要引入原型模式呢?根据我自己查阅资料之后,我觉得好像是面向对象语言中都是引用传递,而且只提供简单的浅拷贝,所以没有拷贝构造函数这么一说,于是要实现深拷贝的功能,就需要原型模式。不知道这个想法对不对,欢迎指正。
常用场景
基本就是你需要从A的实例得到一份与A内容相同,但是又互不干扰的实例的话,就需要使用原型模式。
优点
1.使用拷贝模式比直接new一个对象的开销要小的多。
2.可以在程序运行时(对象属性发生了变化),得到一份内容相同的实例,但之间还不会相互干扰。
缺点
C++实现
#ifndef _PROTOTYPE_H_
#define _PROTOTYPE_H_
class Prototype{
public:
Prototype();
virtual ~Prototype();
virtual Prototype* clone() = 0;
};
class ConcretePrototype:public Prototype{
public:
ConcretePrototype();
~ConcretePrototype();
Prototype* clone();
private:
ConcretePrototype(const ConcretePrototype&);
};
#endif
#include "Prototype.h"
#include <stdio.h>
Prototype::Prototype()
{
}
Prototype::~Prototype()
{
}
ConcretePrototype::ConcretePrototype()
{
}
ConcretePrototype::~ConcretePrototype()
{
}
ConcretePrototype::ConcretePrototype(const ConcretePrototype& c)
{
fprintf(stderr,"ConcretePrototype copy construct!\n");
}
Prototype* ConcretePrototype::clone()
{
return new ConcretePrototype(*this);
}
#include "Prototype.h"
int main()
{
Prototype* p = new ConcretePrototype();
Prototype* a = p->clone();
return 0;
}
g++ -o client client.cpp Prototype.cpp

浙公网安备 33010602011771号