Aha!设计模式(29)-原型(3)

2019-04-13 13:29发布

适用性(续)   前一篇文章调整了《设计模式》一书中的译文,结果是文章从字面上更好理解了。但是这还不够,所以本文进一步说明。   Prototype模式的适用场景为:当一个系统应该独立于它的产品创建、构成和表示,而且   先别管那个“而且”,只看前半句。换个说法就是将构建产品的部分从系统的其他功能中分离出来。如果只看这一点的话,抽象工厂模式同样适合。好在后面有一个"而且”,将这一条和下面三个条件(实际上是三个中的一个即可)组合起来构成了原型模式的应用场景。   • 当要实例化的类是在运行时刻指定时,例如,通过动态装载;   简单地说,动态装载就是在程序执行时通过数据(可以时保存在文件中的,或者来自通讯数据的)生成产品。与之相对的就是静态装载:产品是通过硬编码生成的。这时对象类型是在编码阶段就决定了的。例如抽象工厂生成对象时,创建动作虽然是在程序运行时被执行,但生成对象的种类等信息确是在编码阶段就已经定下来了。   • 或者为了避免创建一个与产品类层次平行的工厂类层次时;   使用抽象工厂或者工厂方法构建产品时,需要和产品种类平行的Factory或Creator类。原型模式通过克隆已有对象来产生新对象,可以作为回避这个缺点的一个选项。   或者当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。   如果我们可以只是通过对象组合就可以生成满足需求的实例时,就可以使用原型模式,以克隆已有对象的方式来构建新实例,而不是构建新类。   作者观点   原型模式的关键在于通过通过克隆已有对象构建新实例,它是前两种情况的前提和基础。如果对象之间的不同可以通过看作时数据层面的,那么使用原型模式可以带来更大的好处。   觉得本文有帮助?请分享给更多人。 阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】