- 原型模式
- 意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- 例子 :Java中的
Object.clone()方法。
以下是一个原型模式(Prototype Pattern)的 Java 实现示例,通过实现 Cloneable 接口并重写 clone() 方法来实现对象的拷贝:
java
import java.util.ArrayList;
import java.util.List;
// 1. 定义原型类,实现 Cloneable 接口
class Prototype implements Cloneable {
private String name;
private List<String> items;
public Prototype(String name, List<String> items) {
this.name = name;
this.items = items;
}
// 重写 clone 方法
@Override
public Prototype clone() {
try {
// 调用 Object.clone() 进行浅拷贝
Prototype cloned = (Prototype) super.clone();
// 对引用类型进行深拷贝
cloned.items = new ArrayList<>(this.items);
return cloned;
} catch (CloneNotSupportedException e) {
throw new AssertionError(); // 不会发生
}
}
// 添加 item
public void addItem(String item) {
this.items.add(item);
}
@Override
public String toString() {
return "Prototype{" +
"name='" + name + '\'' +
", items=" + items +
'}';
}
}
// 2. 客户端代码
public class PrototypePatternDemo {
public static void main(String[] args) {
// 创建原型对象
List<String> initialItems = new ArrayList<>();
initialItems.add("Item1");
initialItems.add("Item2");
Prototype original = new Prototype("Original", initialItems);
// 克隆原型对象
Prototype cloned = original.clone();
// 修改克隆对象
cloned.addItem("Item3");
// 输出结果
System.out.println("Original: " + original);
System.out.println("Cloned: " + cloned);
}
}