Factory Method,Abstract Factory,Prototype,Builder属于对象创建模式。
prototype模式使用情况比较少,通过深拷贝来复制当前状态的对象???
motivation:创建某些结构非常复杂的对象,由于需求的变化,这些对象面临着剧烈的变化,但是他们却能有一个比较稳定一致的接口。
key interface or class:
1. prototype的基类接口。
feature: 基类中自己使用深拷贝构造函数生成自己的对象,调用时先使用基类指针生成具体对象,再调用具体对象的功能。
structure:
template codes:
//产品ISplitter的接口
class ISplitter{
public:
virtual split()=0;
virtual ~ISplitter(){}
}
//工厂基类
class SplitterFactory{
public:
virtual ISplitter* createFactory()=0;
virtual ~createFactory(){}
}
///prototype将二者合并
class ISplitter{
public:
virtual split()=0;
virtual ISplitter* clone()=0;
virtual ~ISplitter(){}
}
//各种具体类别的实现
class TxtSplitterFactory: public ISplitter{
public:
virtual ISplitter* clone(){
return new TxtSplitter(*this); //调用深拷贝构造函数(使用前提)
}
}
//调用
class mainForm{
private:
ISplitter* prototype;
public:
mainForm(ISplitter* prtyp){ //构造mainForm时传递进不同的具体类别
this->prototype = prtyp;
}
void click(){
//调用时生成具体的对象
ISplitter* splitter = prototype->clone();
splitter->split();
}
}
summary:
1. prototype模式用于隔离类对象使用者和具体对象(尤其复杂类型)之间的耦合,要求这些易变类有稳定的接口和;
2.prototype采用“原型克隆”的方法来创建“易变类型”的对象,它可以是我们使用稳定接口来灵活地创建这些“易变对象”,仅需要注册一个新类的对象(原型),然后在任何需要的地方克隆;
3.fprototype中的clone方法可以采用某些框架中的序列化来实现深拷贝。