设计模式-原型模式

原型模式

【干货分享】Java原型模式全解析,看完秒懂!🔥

大家好呀!今天给大家带来Java设计模式系列的又一篇干货 - 原型模式!这个模式超级实用但很多小伙伴都不太了解,赶紧学起来吧!👇

什么是原型模式?🤔

简单来说,原型模式就是"复制"而不是"新建"!它通过复制一个已有对象来创建新对象,而不是通过new关键字实例化。

当你需要创建大量相似对象时,这个模式简直是救星!不仅提高性能,还能简化创建过程,太赞了!✨

如何实现原型模式?💻

Java中实现超简单,只需要:

  1. 实现Cloneable接口
  2. 重写clone()方法

看代码:

java 复制代码
public class Prototype implements Cloneable {
    private String name;

    public Prototype(String name) {
        this.name = name;
    }

    // getter和setter省略...

    @Override
    public Prototype clone() {
        try {
            return (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }
}

使用起来也超简单:

java 复制代码
Prototype original = new Prototype("原始对象");
Prototype copy = original.clone();

// 修改克隆对象不会影响原型对象
copy.setName("修改后的克隆对象");

浅拷贝vs深拷贝,傻傻分不清?🧐

这个必须说清楚!很多面试都会问到!

浅拷贝(默认的clone方式)

只复制基本类型和引用,但引用的对象本身不会被复制。

❌ 缺点:修改克隆对象中的引用类型,原型对象也会受影响!

深拷贝(进阶版)

不仅复制对象本身,还递归复制所有引用类型的成员变量。

✅ 优点:完全独立的两个对象,互不影响!

深拷贝实现方式:

java 复制代码
@Override
public DeepCopy clone() {
    try {
        DeepCopy clone = (DeepCopy) super.clone();
        // 深拷贝引用类型
        clone.address = this.address.clone();
        return clone;
    } catch (CloneNotSupportedException e) {
        return null;
    }
}

还有一招绝杀 - 序列化实现深拷贝!💯

这个方法超级实用,尤其是对象结构复杂的时候:

java 复制代码
public SerializableDeepCopy deepCopy() {
    try {
        // 写入流
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(this);

        // 读出来
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return (SerializableDeepCopy) ois.readObject();
    } catch (Exception e) {
        return null;
    }
}

原型模式有什么优缺点?📊

优点👍

  • 性能提升:复制比new创建快多了
  • 简化创建:不用管对象创建的细节
  • 可以保存对象状态:运行时想复制就复制

缺点👎

  • 循环引用的对象克隆起来好麻烦
  • 深拷贝实现有点复杂
  • 必须实现接口和方法

什么时候用原型模式?🕒

  • 创建对象成本高,但对象之间差异小
  • 不想创建一堆工厂类
  • 类初始化需要消耗超多资源

实际应用在哪里?🌟

  • Java的Object克隆
  • Spring框架的Bean复制
  • 各种配置信息的复制

学会了原型模式,你的代码效率立刻提升一个档次!是不是超级实用?快点赞+收藏吧!❤️

相关推荐
啦啦啦啦啦zzzz6 小时前
设计模式:桥接模式和组合模式
c++·设计模式·组合模式·桥接模式
莫得感情 o8 小时前
设计模式 03 · 工厂方法模式
设计模式·工厂方法模式
饼干哥哥1 天前
字节Seedance2.5终于上线,这次在收割谁?
人工智能·设计模式·前端框架
董员外1 天前
RAG 系统进化论(六):GraphRAG(基于知识图谱的 RAG),从相似文本走向实体关系
人工智能·后端·设计模式
鬼鬼鬼1 天前
从 Prompt 到 Harness:企业级 Agent 工程的完整演进之路
设计模式·架构·ai编程
啦啦啦啦啦zzzz1 天前
设计模式:原型模式
c++·设计模式·原型模式
董员外1 天前
RAG 系统进化论(五):Corrective RAG 与 Self-RAG,让系统发现并纠正错误
人工智能·后端·设计模式
workflower1 天前
高质量数据集的类型
人工智能·机器学习·设计模式·自然语言处理·机器人
啦啦啦啦啦zzzz2 天前
工具:动态类工厂和用配置文件存储属性
c++·设计模式·工具·动态工厂
Nontee2 天前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式