1. 程式人生 > >建立型: 原型模式(Prototype Pattern)

建立型: 原型模式(Prototype Pattern)

原型模式(Prototype Pattern)

原型模式(Prototype Pattern)用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。Prototype模式屬於建立型模式,建立型模式包括FactoryMethod模式,AbstactFactory模式,Singleton模式,ProtoType模式和Builder模式。

模式簡介

原型模式(Prototype Pattern)提供了一個通過已存在物件進行新物件建立的介面(Clone), Clone()實現和具體的語言相關,在C++中通過拷貝建構函式實現。Prototype模式和Builder模式、AbstractFactory模式都是通過一個類(物件例項)來專門負責物件的建立工作(工廠物件),它們之間的區別是:Builder模式重在複雜物件的一步步建立(並不直接返回物件),AbstractFactory模式重在產生多個相互依賴類的物件,而Prototype模式重在從自身複製自己建立新類。

GOF的《設計模式》指出原型模式的意圖是: 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

Prototype模式適用於以下場景:

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

模式圖解

原型模式用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式的UML示例如下:

原型模式示例

原型模式的工作過程如下:

  • Prototype類宣告克隆自身的介面;
  • ConcretePrototype類實現了克隆自身的介面;
  • Client類讓一個原型克隆自身從而建立一個新的物件;

原型模式的有益效果如下:

  • 執行時刻增加和刪除產品Prototype允許只通過客戶註冊原型例項就可以將一個新的具體產品類併入系統;
  • 改變值以指定新物件 高度動態的系統允許你通過物件複合定義新的行為;
  • 改變結構以指定新物件 許多應用由部件和子部件來建立物件;
  • 減少子類的構造 Factory Method;
  • 用類動態配置應用,一些執行時刻環境允許你動態將類裝載到應用中;

模式例項