原型模式
大约 1 分钟
意图
假设有一个对象,你希望生成与其完全相同的一个对象。正常情况下:
- 新建一个相同类型的对象
- 遍历原对象的属性,并设置新对象的属性
效率低,并且有时候原对象的某些属性是私有的。
原型模式能够使你用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
- 通过复制一个已存在的实例,返回新的实例(没有新建实例),原型指被复制的实例
- 实现克隆操作,必须实现 Cloneable接口。
UML
原型模式将克隆过程委派给被克隆的实际对象。 模式为所有支持克隆的对象(即原型)声明了一个通用接口, 该接口让你能够克隆对象, 同时又无需将代码和对象所属类耦合。
- 原型 (Prototype) :声明克隆方法
- 具体原型(Concrete Prototype):实现克隆方法。
实现
// 定义一个原型接口,所有可克隆的类都将实现这个接口
interface Prototype {
Prototype clone(); // 克隆方法
}
class Sheep implements Prototype, Cloneable {
private String name;
public Sheep(String name) {
this.name = name;
}
// 重写clone方法
@Override
public Prototype clone() {
try {
return (Sheep) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
// Getter和Setter方法
}
// 使用原型模式创建对象
public class PrototypePatternDemo {
public static void main(String[] args) {
Sheep sheep1 = new Sheep("Sheep1");
Sheep sheep2 = sheep1.clone();
System.out.println("Sheep1: " + sheep1);
System.out.println("Sheep2: " + sheep2);
}
}