原型模式(Prototype)


目的
指定使用原型实例创建的对象类型,并通过复制此原型来创建新对象。
说明
还记得多莉吗?被克隆的羊!
简而言之,基于现有对象通过克隆创建对象。
维基百科说
原型模式是软件开发中一种创造性的设计模式。当要创建的对象的类型由原型实例确定时,将使用它,该原型实例被克隆以生成新对象。
简而言之,它允许您创建现有对象的副本并根据需要进行修改,而不是从头开始创建对象并进行设置。
程序化示例
在Java中,通过从对象实现可克隆和覆盖克隆,可以很容易地完成。

class Sheep implements Cloneable {
  private String name;
  public Sheep(String name) { this.name = name; }
  public void setName(String name) { this.name = name; }
  public String getName() { return name; }
  @Override
  public Sheep clone() throws CloneNotSupportedException {
    return new Sheep(name);
  }
}

然后它可以像下面一样克隆

Sheep original = new Sheep("Jolly");
System.out.println(original.getName());
// Jolly

// Clone and modify what is required
Sheep cloned = original.clone();
cloned.setName(
"Dolly");
System.out.println(cloned.getName());
// Dolly

适用场景
当系统应独立于其产品的创建,组合和表示方式时,请使用Prototype模式

  • 当要在运行时指定要实例化的类时,例如,通过动态加载
  • 避免构建与产品类层次结构相似的工厂类层次结构
  • 当一个类的实例只能有几个不同的状态组合中的一个时。安装相应数量的原型并克隆它们可能更方便,而不是每次以适当的状态手动实例化类。
  • 与克隆相比,对象创建成本高昂