wordpress 淘宝客网站,家具网站建设规划书,如何建设一个读书的网站,站长工具查询seo一、原型模式
1、原理 原型模式#xff0c;用原型实例指定创建对象的种类#xff0c;并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象#xff0c;而且不需要知道任何创建的细节。原型像是一个模板#xff0c;可以基于它复制好多…一、原型模式
1、原理 原型模式用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象而且不需要知道任何创建的细节。原型像是一个模板可以基于它复制好多对象而复制出来的副本产生任何变化都不会影响到原型注意前提是clone的实现要满足深拷贝。 2、UML类图 要实现原型模式关键就是要实现原型接口里面的Clone方法通过Clone方法来产生原型对象的副本如下 3、示例 声明一个IShape接口该接口核心的是Clone方法。分别两个实现类Circle与Square都实现了接口里面的方法然后分别创建两个实现类对应的实例并通过Clone方法产生实例的副本如下 #include iostream
#include string
using namespace std;// IShape 接口类
class IShape
{
public:virtual string GetShapeName() 0;virtual void SetShapeName(string ) 0;virtual IShape* Clone() 0;
};// Square 类
class Square : public IShape
{
private:string m_shapeName;public:Square(string shapeName) : m_shapeName(shapeName){}string GetShapeName(){return m_shapeName;}void SetShapeName(string str){m_shapeName str;}IShape* Clone(){return new Square(this-m_shapeName);}
};// Circle 类
class Circle : public IShape
{
private:string m_shapeName;public:Circle(string shapeName) : m_shapeName(shapeName){}string GetShapeName(){return m_shapeName;}void SetShapeName(string str){m_shapeName str;}IShape* Clone(){return new Circle(this-m_shapeName);}
};int main()
{string str1 Square;string str2 Circle;IShape *pShape1 new Square(str1);IShape *pShape2 new Circle(str2);IShape *pClone1 pShape1-Clone();IShape *pClone2 pShape2-Clone();cout pClone1 name : pClone1-GetShapeName() endl;cout pClone2 name : pClone2-GetShapeName() endl;return 0;
}4、总结 使用原型模式隐藏了对象创建的细节不论对象多么的复杂使用者调用Clone接口就可以创建一个原型对象的副本。同时无需初始化可动态地获取当前原型的状态即如果修改了原型对象在修改后调用Clone方法获取到的依然是原型对象的最新副本并在当前基础上进行拷贝。