原型设计模式
- 🚩什么是原型设计模式?
- 🚩原型设计模式的特点
- 🚩原型设计模式的结构
- 🚩原型设计模式的优缺点
- 🚩原型设计模式的Java实现
- 🚩代码总结
- 🚩总结
🚩什么是原型设计模式?
原型模式(Prototype Pattern) 是 创建型设计模式,它用于 克隆对象,而不是重新创建它们。
在 原型模式 中,我们创建一个对象作为原型,并允许其克隆多个副本,而不必重新初始化所有字段。
使用场景
- 创建对象开销较大,但又需要 多个相似对象。
- 对象的构造过程复杂,希望通过 复制现有对象 来减少重复代码。
- 需要 避免使用 new 关键字 来创建实例。
🚩原型设计模式的特点
- 减少对象创建成本:克隆对象比
new
关键字创建对象更高效。 - 避免重复初始化:对象已存在,直接克隆,不需要重复赋值。
- 提供深拷贝和浅拷贝:可以根据需求实现不同级别的克隆。
- 解耦对象构造:创建对象的逻辑独立于使用对象的逻辑。
🚩原型设计模式的结构
原型模式包含以下几个主要部分:
- Prototype(原型接口):定义
clone()
方法,所有要克隆的类都要实现该接口。 - ConcretePrototype(具体原型类):实现
Prototype
接口,并提供克隆对象的方法。 - Client(客户端):通过调用
clone()
方法来创建新对象,而不是使用new
。
图例:
🚩原型设计模式的优缺点
✅ 优点
- 提高性能:避免了
new
操作,减少对象创建开销。 - 简化对象创建:只需要
clone()
方法即可获得新对象。 - 减少代码重复:省去了重新初始化对象的代码逻辑。
❌ 缺点
- 需要实现
clone()
方法:所有类都要 显式实现克隆逻辑,可能增加代码复杂度。 - 深拷贝和浅拷贝问题:
- 浅拷贝:仅复制对象本身,不复制其内部引用对象。
- 深拷贝:需要手动实现内部对象的克隆逻辑,可能增加代码复杂度。
🚩原型设计模式的Java实现
代码地址:GitHub
- 首先创建一个原型接口Prototype,接口定义一个
clone()
方法
/*** @author hanson* @description: 原型接口* @date 2025-03-23 22:30:55* @version: 1.0*/
public interface Prototype {public Object Clone();
}
- 现在创建一个具体的产品Product去实现这个接口,重写clone方法
/*** @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;}@Overridepublic Object Clone() {Product object = new Product();object.id = this.id;object.price = this.price;return object;}
}
- 创建一个客户端调用测试
/*** @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
关键字带来的性能损耗。 - 需要 重复创建相同类型的对象,但不希望每次都手动初始化。
- 适用于 具有复杂状态的对象,希望通过复制来保留状态。
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️