跳到主要内容

Prototype 原型模式

对象式 + 创建类 Object + Creationsl

目的

通过复制从 prototype 中创建多个 identical

providing a prototype object to indicate the desired type of object to be created

创建过程中不用知道创建过程中的任何细节

当创建对象的成本很高,且新对象可以来自于现存的老对象 或者系统需要保存对象的状态,但是对象中状态的改变非常 minimal,可以考虑使用

模式结构

包括

  • 原型:抽象原型类
  • ConcretePrototype: concrete prototype class
  • Client: client class

常见案例

Java

所有的 Java 类都继承自 java.lang.Object 该类提供了一个 clone() 方法用于创建一个 Java 对象的浅拷贝

所有能被克隆的类都必须有 Cloneable 的标记接口 marker interface

如果没有该接口,但是被调用克隆方法 Java 编译器 compiler 将抛出 CloneNotSupportedException

优点

  • 简化了创建对象的过程,通过复制已存在的对象更有效;不需要使用工厂类
  • 好的扩展性 extensibility
  • 如果使用深拷贝,则允许保存对象的状态 preservation of an object' s state; 保存未执行的操作

缺陷

  • 自实现时需要为每个类提供复制方法,在修改过程中可能会破坏开闭原则
  • 实现深拷贝需要写更多复杂代码