创建型模式 - 原型模式 (Prototype Pattern)
创建型模式 -原型模式 (Prototype Pattern)
它允许通过复制现有对象来创建新对象,而无需知道对象的具体创建细节。在 Java 中,可以通过实现 Cloneable 接口和重写 clone() 方法来实现原型模式。
- 有深、浅两种克隆
- 类实现 Cloneable 接口就可以深克隆
- 如果类中又包含了引用类型对象,这部分将不能被深克隆,会变成浅克隆
- 什么意思呢? 举例一个 Box 类, 类里面引用了 SubBox 类, 当 Box 被克隆的时候, SubBox 引用的是同一个对象
public class Box implements Cloneable { private String name; private String color; private Double width; // 引用类型, 指的是这部分只会被浅克隆 private SubBox subBox; // 那么怎么解决这种包含引用对象也深克隆呢? // 可以采用序列化写入成文件, 再反序列化转回来成对象,也能达到连引用类型也深克隆的效果 // 就像前端 JavaScript 对象,你应该没少写把对象转成 JSON 字符串再转回来,来达成深克隆 } ```
// 定义可克隆的形状类
class Shape implements Cloneable {
private String type;
public Shape(String type) {
this.type = type;
}
public String getType() {
return type;
}
// 重写 clone 方法
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
// 客户端代码
public class PrototypePatternExample {
public static void main(String[] args) {
// 创建原始形状对象
Shape originalShape = new Shape("Circle");
// 克隆形状对象
Shape clonedShape = (Shape) originalShape.clone();
System.out.println("Original Shape Type: " + originalShape.getType());
System.out.println("Cloned Shape Type: " + clonedShape.getType());
}
}