1. 程式人生 > >Java 設計模式(八)《原型模式》

Java 設計模式(八)《原型模式》

原型模式

原型模式(Prototype Pattern)是用於建立重複的物件,同時又能保證效能。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。

所屬型別: 建立型

標籤:

  • Java
  • Gang Of Four
  • Difficulty-Beginner(入門級難度)

注:

什麼是 GOF(四人幫,全拼 Gang of Four)?
在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名為 Design Patterns - Elements of Reusable Object-Oriented Software(中文譯名:設計模式 - 可複用的面向物件軟體元素) 的書,該書首次提到了軟體開發中設計模式的概念。
四位作者合稱 GOF(四人幫,全拼 Gang of Four)。他們所提出的設計模式主要是基於以下的面向物件設計原則。
對介面程式設計而不是對實現程式設計。
優先使用物件組合而不是繼承。

意圖

使用原型例項來指定建立物件的種類,並通過拷貝創建出新的物件

解決問題

在執行期建立或刪除原型

public class Shape implements Cloneable {

    private String name;

    public Shape(String name) {
        this.name = name;
    }
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

何時使用

  1. 當一個系統應該獨立於它的產品建立,構成和表示時。
  2. 當要例項化的類是在執行時刻指定時,例如,通過動態裝載。
  3. 為了避免建立一個與產品類層次平行的工廠類層次時。
  4. 當一個類的例項只能有幾個不同狀態組合中的一種時。建立相應數目的原型並克隆它們可能比每次用合適的狀態手工例項化該類更方便一些。

使用場景

  1. 資源優化場景。
  2. 類初始化需要消化非常多的資源,這個資源包括資料、硬體資源等。
  3. 效能和安全要求的場景。
  4. 通過 new 產生一個物件需要非常繁瑣的資料準備或訪問許可權,則可以使用原型模式。
  5. 一個物件多個修改者的場景。
  6. 一個物件需要提供給其他物件訪問,而且各個呼叫者可能都需要修改其值時,可以考慮使用原型模式拷貝多個物件供呼叫者使用。
  7. 在實際專案中,原型模式很少單獨出現,一般是和工廠方法模式一起出現,通過 clone 的方法建立一個物件,然後由工廠方法提供給呼叫者。

原型模式已經與 Java 融為渾然一體,大家可以隨手拿來使用。

注意事項:

與通過對一個類進行例項化來構造新物件不同的是,原型模式是通過拷貝一個現有物件生成新物件的。
淺拷貝實現 Cloneable,重寫,
深拷貝是通過實現 Serializable 讀取二進位制流。

優點:

  1. 效能提高。
  2. 逃避建構函式的約束。

缺點:

  1. 配備克隆方法需要對類的功能進行通盤考慮,這對於全新的類不是很難,但對於已有的類不一定很容易,特別當一個類引用不支援序列化的間接物件,或者引用含有迴圈結構的時候。
  2. 必須實現 Cloneable 介面。

應用例項