今天来晚了,因为公司周一很多事情要做,而我昨天晚上没有睡好,来了以后什么事情没做先睡了一个上午。:(幸好老板在开会hiahia.不过下次就没有这么幸运了,要是有孙猴子的分身法,随便克隆一个我放在那里干活儿,我睡觉多好呀。。。。所以今天就介绍一下原型模式(prototype)
有时候,我们所要创建的对象大致上都很相似,只是在部分属性的值上有所区别,而且,他们的初始化过程相对来说比较复杂,需要耗费一定的时间,那么我们可以使用原型模式。首先初始化一个一个类的一个实例,然后其他的实例通过对第一个实例的克隆来创建。然后,或者在克隆方法(clone)中处理他们的不同,或者由调用方来处理,这要看哪个更关心他们的差异。如果调用方根本不关心他们的差异,那么就应该有拷贝方法来处理他们的差异并返回实例。
这个模式在<设计模式>中是这样写的:
用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。
他的适用性:
当一个系统应该独立与他的产品的创建、构成、呵表示时。(也就是说,调用方不关心他所调用的对象是怎么创建的,内部结构是怎么样的,这些由克隆方法来处理)
为了避免创建一个与产品类层次平行的工厂类层次时(我们在前面介绍了工厂方法,一个工厂类可以有多个工厂方法,分别创建不同的产品,当一个工厂类只有一个工厂方法,那么这个工厂类和它的产品的接口就处于一个平行的层次,这时候为了避免创建太多的工厂类,导致结构复杂,可以是用原型模式)。
当一个类的视力只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆他们可能比每次用合适的状态手工市里花该类更方便(这个就是我们上面讲的所谓初始化问题)