原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
结构
原型模式主要有三个角色:
- 客户端角色:提出拷贝对象的需求。
- 抽象原型角色:定义了拷贝的方法。
- 具体原型角色:实现抽象原型角色的克隆接口。就是我们的文件实现了可以被复制的功能。
优缺点
- 优点:性能提高,逃避构造函数的约束。
- 缺点:配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。必须实现 Cloneable 接口。
代码实现
//抽象原型类
public abstract class Prototype implements Cloneable{
private String id;
public Prototype(String id) {
this.id = id;
}
public String getId() {
return this.id;
}
public Prototype clone() throws CloneNotSupportedException {
return (Prototype) super.clone();
}
}
//具体原型类
public class CreateProtype extends Prototype{
public CreateProtype(String id) {
super(id);
}
}
//测试类
public class Client {
public static void main(String[] args) {
Prototype p1 = new CreateProtype();
Prototype p2 = p1.clone();
System.out.println(p1 == p2);
}
}
输出结果为:false,说明p1,p2的引用地址不同,实现了深拷贝。