设计模式-原型

  1. 意图
  2. 例子
  3. 适用性
  4. 结构
  5. 协作
  6. 效果

意图

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

例子

克隆(clone)非常适合这里的说明,复制一个类实例。

但是这里涉及到了:浅拷贝和深拷贝。
他们在java中有原始类型和引用类型(这真对引用类型)。所谓浅拷贝只是拷贝对象的引用,而非里面这个对象里面的所有值;深拷贝则相反,并不知拷贝引用,而是新建一个引用并复制原始对象中的所有值。

github

适用性

  1. 当一个系统应该独立于他的产品创建、构成及表示时
  2. 当要实例化的类是在运行时刻指定时,例如动态装载
  3. 为了避免创建一个与产品类层次平行的工厂类层次时
  4. 当一个类的实例只能有几个不同状态组合中的一种时

建立相应数目的原型并克隆他可能比每次用合适的手工实例更方便。

结构

github

协作

客户请求一个原型克隆自身。

效果

  1. 它对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目。此外,这些模式使客户无需改变即可使用与特定应用相关的类。
  2. 运行时刻增加和删除产品Prototype允许只通过客户注册原型实例就可以将一个新的具体产品类并入系统。它比其他创建型模式更为灵活,因为客户可以在运行时刻建立和删除原型。
  3. 改变值以指定新对象高度动态的系统允许你通过对象复合定义新的行为-例如,通过为一个对象变量指定值—并且不定义新的类。你通过实例化已有类并且将这些实例注册 为客户对象的原型,就可以有效定义新类别的对象。客户可以将职责代理给原型,从而表现出新的行为。
  4. 改变结构以指定新对象许多应用由部件和子部件来创建对象。例如电路设计编辑器就是由子电路来构造电路的。为方便起见,这样的应用通常允许你实例化复杂的、用户定义的结构,比方说,一次又一次的重复使用一个特定的子电路。
  5. 用类动态配置应用一些运行时刻环境允许你动态将类装载到应用中。