跟着GPT学设计模式之原型模式

如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。

如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从 RPC、网络、数据库、文件系统等非常慢速的 IO 中读取,这种情况下,我们就可以利用原型模式,从其他已有对象中直接拷贝得到,而不用每次在创建新对象的时候,都重复执行这些耗时的操作。

建造者模式的实现

说明

原型模式的核心是一个抽象原型类(Prototype),该类定义了克隆方法(clone),用于复制自身并创建新对象。具体的原型类(Concrete Prototype)继承自抽象原型类,并实现了克隆方法。

需要注意的是,在 Java 中使用原型模式进行对象克隆时,通常需要实现 Cloneable 接口,并重写 clone() 方法来实现深层克隆。否则,默认的 clone() 方法只会进行浅层克隆,即复制对象的引用而不是实际数据。如果对象包含引用类型的成员变量,则需要对这些成员变量也进行克隆操作,以保证克隆对象与原始对象之间的数据独立性。

编程示例

java 复制代码
// 抽象原型类
public abstract class Prototype implements Cloneable {
    // 定义克隆方法
    public abstract Prototype clone();
}

// 具体原型类A
public class ConcretePrototypeA extends Prototype {
    // 实现克隆方法
    @Override
    public Prototype clone() {
        return new ConcretePrototypeA();
    }
}

// 具体原型类B
public class ConcretePrototypeB extends Prototype {
    // 实现克隆方法
    @Override
    public Prototype clone() {
        return new ConcretePrototypeB();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Prototype prototypeA = new ConcretePrototypeA();  // 创建原型对象A
        Prototype cloneA = prototypeA.clone();  // 克隆原型对象A

        Prototype prototypeB = new ConcretePrototypeB();  // 创建原型对象B
        Prototype cloneB = prototypeB.clone();  // 克隆原型对象B
    }
}

抽象原型类 Prototype 定义了克隆方法 clone(),具体原型类 ConcretePrototypeA 和 ConcretePrototypeB 分别继承自抽象原型类,并实现了克隆方法。客户端通过实例化具体原型类来创建原型对象,然后通过调用克隆方法 clone() 复制该对象并创建新的对象。

深度拷贝的另外一种实现方法:

java 复制代码
public Object deepCopy(Object object) {
  ByteArrayOutputStream bo = new ByteArrayOutputStream();
  ObjectOutputStream oo = new ObjectOutputStream(bo);
  oo.writeObject(object);
  
  ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
  ObjectInputStream oi = new ObjectInputStream(bi);
  
  return oi.readObject();
}

以上内容基于GPT创建和整理。

参考

相关推荐
码匠许师傅42 分钟前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
码匠许师傅1 小时前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
workflower16 小时前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
Java后端的Ai之路17 小时前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
Easy_API1 天前
OpenAI三周内第二次降价,GPT-5.6 Sol砍了20%到33
大数据·前端·人工智能·gpt·深度学习
码匠许师傅1 天前
【设计模式精讲】4.单例模式(Singleton)
c++·单例模式·设计模式
雾削木1 天前
2026 编程领域热点知识速览:AI 辅助开发、设计模式实战与嵌入式高效迭代
人工智能·设计模式
自动化和Linux2 天前
【win11+virtual Box简单安装centos7,不使用GPT分区】
linux·gpt·虚拟现实
神奇霸王龙2 天前
Codex MCP GA 实测:Qwen / GLM / Kimi / DeepSeek / MiniMax 调度 Codex 沙箱的真实成本
人工智能·ai·agent·ai编程·原型模式·mcp