面临问题:在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。那么如何封装这种动态的变化?
我要填写很多表格,这些表格只有姓名不一样,其他都一样,也就是这个产品类具有一定的等级结构。但是里面的属性是动态变化的,例如姓名。我就想怎么样才能创建这种对象?
解决方案:以一个已有的对象作为原型,通过它来创建新的对象。在增加新的对象的时候,新对象的细节创建工作由自己来负责,从而使新对象的创建过程与框架隔离开来
例如:孙悟空可以根据自己的形象,复制出很多"身外身"来。然后可以对每个身外身进行修改,这样就能很方便的创建出满足需求的对象。
什么情况下使用原型模式?
假设一个系统的产品类是动态加载的,而且产品类具有一定的等级结构。这时如果采取工厂模式的话,工厂类就不得不具有一个相应的等级结构。而产品类的
等级结构一旦变化,工厂类的等级结构就不得不有一个相应的变化。这对于产品结构可能会有经常性变化的系统来说,采用工厂模式就不太方便。
Why not use “new”?
如果你有一个对象,有着复杂的状态。你希望得到另一个拷贝,但是同时具有一模一样的状态,如果选择从头创建一个新的对象,你将不得不重新一个一个地设臵这些状态。有的时候这很麻烦,有的时候这不可能做到。这种时候,使用原型模式,调用一个克隆方法,就变成非常好的办法。