设计模式-原型模式实践案例

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的实例来创建新的实例,而不是通过初始化过程。在 Java 中,这通常是通过实现 Cloneable 接口并定义 clone() 方法来实现的。原型模式适用于创建复制对象的成本比直接创建新实例更低的情况。

下面是一个 Java 中实现原型模式的实践案例:

步骤1:定义原型接口

复制代码
1// 定义一个实现 Cloneable 接口的原型接口
2public interface Prototype extends Cloneable {
3    Prototype clone() throws CloneNotSupportedException;
4}

步骤2:创建具体原型类

复制代码
1// 创建具体原型类
2public class ConcretePrototype implements Prototype {
3    private String field;
4
5    public ConcretePrototype(String field) {
6        this.field = field;
7    }
8
9    public String getField() {
10        return field;
11    }
12
13    // 实现 clone 方法
14    @Override
15    public ConcretePrototype clone() throws CloneNotSupportedException {
16        // 浅拷贝:基本数据类型会重新创建,引用类型仍指向原对象所指向的地址
17        return (ConcretePrototype) super.clone();
18    }
19
20    // 深拷贝实现(如果需要)
21    public ConcretePrototype deepClone() {
22        // 自行实现深拷贝逻辑
23        ConcretePrototype cloned = new ConcretePrototype(new String(this.field));
24        // 如果有其他复杂类型的字段,需要继续创建其副本
25        return cloned;
26    }
27}

步骤3:使用原型实例创建对象

复制代码
1public class Client {
2    public static void main(String[] args) {
3        ConcretePrototype prototype = new ConcretePrototype("Original");
4        try {
5            ConcretePrototype clone = prototype.clone();
6            System.out.println("Cloned: " + clone.getField());
7        } catch (CloneNotSupportedException e) {
8            e.printStackTrace();
9        }
10    }
11}

在上述代码中,ConcretePrototype 类实现了 Prototype 接口,并覆盖了 clone() 方法,以提供对象的复制逻辑。浅拷贝只会复制对象的基本数据类型的值,而所有的引用类型仍然指向原始对象,因此如果原始对象中包含复杂的对象结构,你可能需要实现深拷贝,即创建那些对象的新实例。

客户端代码通过调用 clone() 方法来复制原型实例,从而创建新对象。这种方式可以避免使用常规的构造函数来创建对象,特别是当对象的创建过程很昂贵或复杂时。

原型模式在需要频繁创建相似或相同配置的新对象时十分有用,例如,在图形编辑器中复制图形对象,在游戏中复制角色或道具等场景。这样做可以节省创建对象时的资源和时间,特别是当直接实例化对象(如通过 new 关键字)的成本很高时。

相关推荐
J2虾虾1 天前
Spring AI Alibaba - 检索增强生成(RAG)
人工智能·spring·原型模式
workflower2 天前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
折哥的程序人生 · 物流技术专研2 天前
Java 23 种设计模式:从踩坑到精通 | 抽象工厂 —— 支付/收款如何成套创建?跨平台 UI 如何一键换肤?
java·开发语言·后端·设计模式
老码观察2 天前
设计模式实战解读(八):代理模式——控制访问的隐形中间层
设计模式·代理模式
我爱cope2 天前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展
geovindu2 天前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式
我爱cope2 天前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
nnsix2 天前
设计模式 - 迭代器模式 笔记
笔记·设计模式·迭代器模式
geovindu2 天前
go: Bounded Parallelism Pattern
开发语言·后端·设计模式·golang·有界并行模式
IT策士2 天前
第 23篇 k8s之Pod:多容器 Pod 与设计模式(Sidecar 等)
设计模式·容器·kubernetes