23种设计模式-原型(Prototype)设计模式

原型设计模式

🚩什么是原型设计模式?

原型模式(Prototype Pattern)创建型设计模式 ,它用于 克隆对象,而不是重新创建它们

原型模式 中,我们创建一个对象作为原型,并允许其克隆多个副本,而不必重新初始化所有字段。

使用场景

  • 创建对象开销较大 ,但又需要 多个相似对象
  • 对象的构造过程复杂 ,希望通过 复制现有对象 来减少重复代码。
  • 需要 避免使用 new 关键字 来创建实例。

🚩原型设计模式的特点

  • 减少对象创建成本 :克隆对象比 new 关键字创建对象更高效。
  • 避免重复初始化:对象已存在,直接克隆,不需要重复赋值。
  • 提供深拷贝和浅拷贝:可以根据需求实现不同级别的克隆。
  • 解耦对象构造:创建对象的逻辑独立于使用对象的逻辑。

🚩原型设计模式的结构

原型模式包含以下几个主要部分:

  • Prototype(原型接口) :定义 clone() 方法,所有要克隆的类都要实现该接口。
  • ConcretePrototype(具体原型类) :实现 Prototype 接口,并提供克隆对象的方法。
  • Client(客户端) :通过调用 clone() 方法来创建新对象,而不是使用 new

🚩原型设计模式的优缺点

✅ 优点

  • 提高性能 :避免了 new 操作,减少对象创建开销。
  • 简化对象创建 :只需要 clone() 方法即可获得新对象。
  • 减少代码重复:省去了重新初始化对象的代码逻辑。

❌ 缺点

  • 需要实现 clone() 方法 :所有类都要 显式实现克隆逻辑,可能增加代码复杂度。
  • 深拷贝和浅拷贝问题
    • 浅拷贝:仅复制对象本身,不复制其内部引用对象。
    • 深拷贝:需要手动实现内部对象的克隆逻辑,可能增加代码复杂度。

🚩原型设计模式的Java实现

代码地址:GitHub

  • 首先创建一个原型接口Prototype,接口定义一个clone()方法
java 复制代码
/**
 * @author hanson
 * @description: 原型接口
 * @date 2025-03-23 22:30:55
 * @version: 1.0
 */
public interface Prototype {
    public Object Clone();
}
  • 现在创建一个具体的产品Product去实现这个接口,重写clone方法
java 复制代码
/**
 * @author hanson
 * @description: 体原型类
 * @date 2025-03-23 22:31:37
 * @version: 1.0
 */
public class Product implements Prototype {

    private int id;
    private double price;

    public Product() {

    }

    public Product(int id, double price) {
        this.id = id;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public Object Clone() {
        Product object = new Product();
        object.id = this.id;
        object.price = this.price;

        return object;
    }
}
  • 创建一个客户端调用测试
java 复制代码
/**
 * @author hanson
 * @description: 模拟客户端
 * @date 2025-03-23 22:33:22
 * @version: 1.0
 */
public class PrototypePattern {

    public static void main(String[] args) {
        Product product1 = new Product(2022, 5.28);
        System.out.println(product1.getId() + " " + product1.getPrice());

        // Product product2 = new Product(2022, 5.28);
        Product product2 = (Product) product1.Clone();
        System.out.println(product2.getId() + " " + product2.getPrice());

        Product product3 = (Product) product1.Clone();
        System.out.println(product3.getId() + " " + product3.getPrice());
    }
}

📌 运行结果

🚩代码总结

  • Prototype(原型接口) 定义 Clone() 方法,所有要克隆的类都要实现该接口。
  • Product(具体原型类) 实现 Prototype 接口,并在 Clone() 方法中复制对象属性。
  • Main(客户端) 通过 Clone() 方法克隆多个 Product 实例,而不是使用 new 关键字创建对象。

🚩总结

  • 原型模式(Prototype Pattern) 适用于 创建成本高构造逻辑复杂 的对象。
  • 通过 clone() 方法复制对象,避免 new 关键字的高成本操作。
  • 在 Java 中,可以使用 Cloneable 接口和 Object.clone() 方法 简化克隆操作
  • 在实现深拷贝时 ,需要 手动克隆内部对象,以避免浅拷贝带来的问题。

✅ 适用场景:

  • 需要 高效创建对象 ,避免 new 关键字带来的性能损耗。
  • 需要 重复创建相同类型的对象,但不希望每次都手动初始化。
  • 适用于 具有复杂状态的对象,希望通过复制来保留状态。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关推荐
深情不及里子3 小时前
每天认识一个设计模式-桥接模式:在抽象与实现的平行宇宙架起彩虹桥
设计模式·桥接模式
Hanson Huang3 小时前
23种设计模式-模板方法(Template Method)设计模式
java·设计模式·模板方法模式·行为型设计模式
木子庆五3 小时前
Android设计模式之观察者模式
android·观察者模式·设计模式
此木|西贝4 小时前
【设计模式】策略模式
设计模式·策略模式
有龍则灵5 小时前
责任链设计模式在Dubbo中的应用深度解析
设计模式·dubbo
渊渟岳6 小时前
掌握设计模式--迭代器模式
设计模式
Hanson Huang19 小时前
23种设计模式-享元(Flyweight)设计模式
java·设计模式·享元模式·结构型设计模式
chxii21 小时前
4.6js面向对象
原型模式
Aphelios38021 小时前
Java全栈面试宝典:内存模型与Spring设计模式深度解析
java·学习·spring·设计模式·云原生·面试
NorthCastle1 天前
设计模式-结构型模式-外观模式
java·设计模式·外观模式