23种设计模式-创建型模式之原型模式(Java版本)

Java 原型模式(Prototype Pattern)详解

🧬 什么是原型模式?

原型模式用于通过复制已有对象的方式创建新对象,而不是通过 new 关键字重新创建。

核心是:通过克隆(clone)已有对象,以便快速创建多个相似对象。


🧠 使用场景

  • 创建对象成本较高(如数据库连接、大对象)
  • 想避免重复初始化
  • 希望对象可以被"快速复制"

🏗️ 模式结构

  • Prototype(原型接口)
  • ConcretePrototype(具体原型)
  • Client(客户端)

✅ 示例:克隆简历

原型接口

java 复制代码
public interface Prototype extends Cloneable {
    Prototype clone();
}

具体原型类

public 复制代码
    private String name;
    private String gender;
    private String experience;

    public Resume(String name, String gender, String experience) {
        this.name = name;
        this.gender = gender;
        this.experience = experience;
    }

    public void setExperience(String experience) {
        this.experience = experience;
    }

    @Override
    public Prototype clone() {
        try {
            return (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException("Clone failed", e);
        }
    }

    @Override
    public String toString() {
        return "Resume [name=" + name + ", gender=" + gender + ", experience=" + experience + "]";
    }
}

客户端调用

public 复制代码
    public static void main(String[] args) {
        Resume resume1 = new Resume("Alice", "Female", "3 years at Google");
        Resume resume2 = (Resume) resume1.clone();
        resume2.setExperience("5 years at Amazon");

        System.out.println(resume1);
        System.out.println(resume2);
    }
} 

🔍 深拷贝 vs 浅拷贝

  • 浅拷贝:拷贝对象本身,引用类型仍指向同一内存
  • 深拷贝:连引用对象也一并复制,互不影响

🧩 优点

  • 避免重复初始化,提升性能

  • 简化对象创建过程

  • 可动态添加新对象,不需依赖类结构

⚠️ 缺点

  • 深拷贝实现复杂

  • 涉及对象引用时需小心内存问题

  • clone 方法较隐蔽,不如构造器直观

✅ 使用建议

  • 当需要频繁创建结构相似对象,或者对象构建代价大时(如图形编辑器中的图形、工作流节点等),原型模式是高效之选
相关推荐
2301_780789664 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
第九序言T4 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
学长毕设4 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn5 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川5 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵5 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
程序喵大人5 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David6 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1006 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin6 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php