原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。
原型模式包含以下几个主要角色:
-
原型接口(Prototype Interface):定义一个用于克隆自身的接口,通常包括一个
clone()
方法。 -
具体原型类(Concrete Prototype):实现原型接口的具体类,负责实际的克隆操作。这个类需要实现
clone()
方法,通常使用浅拷贝或深拷贝来复制自身。 -
客户端(Client):使用原型实例来创建新的对象。客户端调用原型对象的
clone()
方法来创建新的对象,而不是直接使用构造函数。
优点
- 性能提高
- 避免构造函数的约束
缺点
- 配备克隆方法需要全面考虑类的功能,对已有类可能较难实现,特别是处理不支持串行化的间接对象或含有循环结构的引用时。
代码案例
import java.util.UUID; public interface Prototype { Object clone();
} /** * 飞机类 */
class Plane implements Prototype { private Integer id; private String type; public Integer getId() { return id; } public String getType() { return type; } public Plane(){ id = (int) (Math.random() * 100 + 1); type = UUID.randomUUID().toString(); } public Plane(Plane plane){ this.id = plane.id; this.type = plane.type; } @Override public String toString() { return "Plane{" + "id=" + id + ", type='" + type + '\'' + '}'; } @Override public Object clone() { return new Plane(this); }
} class Test{ public static void main(String[] args) { Plane plane = new Plane(); System.out.println(plane); Plane clone = (Plane) plane.clone(); System.out.println(clone); }
}
程序输出
Plane{id=71, type='cc4e73ae-85c4-4735-a74d-d7bae0642724'}
Plane{id=71, type='cc4e73ae-85c4-4735-a74d-d7bae0642724'}