原型設計模式
- 🚩什么是原型設計模式?
- 🚩原型設計模式的特點
- 🚩原型設計模式的結構
- 🚩原型設計模式的優缺點
- 🚩原型設計模式的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
關鍵字帶來的性能損耗。 - 需要 重復創建相同類型的對象,但不希望每次都手動初始化。
- 適用于 具有復雜狀態的對象,希望通過復制來保留狀態。
創作不易,不妨點贊、收藏、關注支持一下,各位的支持就是我創作的最大動力??