原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建模式,它通过复制现在对象来创建新对象,而不是通过实例化类的方式。
¶核心思想
- 克隆一个已有对象,而不是从头创建。
- 被克隆的对象称为“原型(Prototype)”。
¶示例
在Java中,可以通过实现Cloneable
接口并重写Object
类中的clone()
方法来实现原型模式。
1 | public class Prototype implements Cloneable { |
将被拷贝的属性。
“饼印”。
优点:
- 提升性能: 避免了构造函数的开销,直接拷贝内存中的二进制流。
- 简化对象创建: 无需关心对象的具体类型,只需要调用克隆方法即可。
- 动态配置: 运行时可以动态加载和复制对象。
适用场景:
- 对象的创建过程复杂或耗时。
- 需要多个相似对象,并且它们之间差异较小。
- 系统需要独立于对象的创建与组合方式。
¶浅拷贝与深拷贝
- 浅拷贝: 只复制基本数据类型,引用类型仅复制引用地址。
- 深拷贝: 递归复制所有层级的对象。
实现深拷贝的方法有两种
-
手动复制每个字段
1
2
3
4
protected Prototype clone() {
return new Prototype(this.field); //
}创建对象,而非调用
super.clone();
-
序列化反序列化(适用于可序列化的对象)
1
2
3
4
5
6
7
8
9
10
11public <T extends Serializable> T deepCopy(T object) {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos)) {
oos.writeObject(object);
try (ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis)) {
return (T) ois.readObjet();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
¶总结
特性 | 描述 |
---|---|
模式类型 | 创建模式 |
核心机制 | 克隆已存在对象 |
主要优点 | 提高性能、简化创建流程 |
关键接口/类 | Cloneable,Object.clone() |
适用场景 | 对象创建复杂、需要多个相似对象 |