Prototype模式-原形模式,就是自我复制,一个clone函数的事。先把UML图贴出来。
不同的语言实现可能不同,在C++中,一般clone的实现是:
Prototype* ConcretPrototype::Clone() const
{
return new ConcretPrototype(*this);
}
这一句很简单,但是它依赖于复制构造函数中对深拷贝和浅拷贝的完好实现,也就是ConcretProtype(const ConcretProtype& cp)函数中,要做好指针成员变量的拷贝工作!
有人可能会疑问,我已经有复制构造函数了,还要这个模式有何用?非常好的问题,我让我感叹,没有实践经验,光是看书上这些理论是很难达到深入理解的!回答如下:
Base *pB = new Derived();
现在要克隆pB,怎么办? 只有Derived d(*pB)!但是如果只有抽象基类(Base) 的调用接口,则你根本不知道具体要实例化哪个子类(Derived),
而且你也不需要知道,所以根本无法克隆。 这时原型模式就显现优势了,即只要调用clone 函数即可: pB->Clone();