最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
GoF设计模式:原型模式详解
时间:2026-05-22 08:30:01 编辑:袖梨 来源:一聚教程网
当对象创建过程复杂耗时,需要大量相似实例时,原型模式通过复制现有对象来提升效率,避免重复初始化。本文将详解其实现原理与典型应用场景。
前言

为什么需要原型模式?
在某些情况下,直接使用 new 创建对象并不高效——可能需要访问数据库、调用接口或执行复杂计算。当需要生成大量相似对象时,这个问题尤为突出:
// 示例:创建与现有角色相似的新角色,仅名称不同
GameCharacter warriorTemplate = loadFromDatabase("warrior"); // 耗时操作
// 批量创建时重复查询数据库效率低下
这种情况下,"复制"比"新建"更高效,这正是原型模式的价值所在。
概念
作为创建型设计模式,原型模式的核心在于通过复制现有对象创建新实例,避免重复执行初始化逻辑(如数据库查询、网络请求等)。
该模式包含三个关键组成部分:
- 抽象原型:定义克隆方法
clone() - 具体原型:实现克隆逻辑,返回自身副本
- 原型注册表:集中管理常用原型,按需提供克隆副本

抽象原型定义接口,具体原型实现拷贝,注册表管理缓存,客户端通过键值获取克隆对象。
拷贝方式分为两类:
- 浅拷贝:仅复制基本类型字段,引用类型共享内存地址
- 深拷贝:完全复制所有字段,新旧对象完全独立
// 浅拷贝示例:共享List引用
class ShallowPrototype {
private String name;
private List tags; @Override
public ShallowPrototype clone() {
ShallowPrototype copy = new ShallowPrototype();
copy.name = this.name;
copy.tags = this.tags;
return copy;
}
}// 深拷贝示例:创建独立List
class DeepPrototype {
private String name;
private List tags; @Override
public DeepPrototype clone() {
DeepPrototype copy = new DeepPrototype();
copy.name = this.name;
copy.tags = new ArrayList<>(this.tags);
return copy;
}
}
原型模式的核心价值在于规避高成本的对象创建过程。选择深拷贝还是浅拷贝,取决于引用字段是否需要独立性——错误选择可能导致性能浪费或共享数据问题。
实现
GoF 标准实现
标准实现包含定义 Prototype 接口,具体类实现 clone() 方法,配合原型注册表统一管理:
// 抽象原型接口
public interface Prototype {
Prototype clone();
}// 具体原型类
public class ConcretePrototype implements Prototype {
private String data;
private List items; public ConcretePrototype(String data, List items) {
this.data = data;
this.items = items;
} @Override
public Prototype clone() {
return new ConcretePrototype(this.data, new ArrayList<>(this.items));
}
}// 原型注册表
public class PrototypeRegistry {
private Map prototypes = new HashMap<>(); public void register(String key, Prototype prototype) {
prototypes.put(key, prototype);
} public Prototype get(String key) {
Prototype prototype
相关文章
-
王者荣耀亲密关系怎么解除
05-22
-
智象未来估值多少亿?3个关键指标帮你判断
05-22
-
名将杀战役模式通关方法
05-22
-
智象未来完成超5亿元新一轮融资,凭什么?
05-22
-
任天堂虚幻5首作:耀西与神秘之书现已开放预购
05-22
-
Excel如何将分开的姓名和电话合并
05-22