天天看點

設計模式--原型模式

原型模式(prototype)

原型模式最初的定義出現于《設計模式》(Addison-Wesley,1994)
原型模式:使用原型執行個體指定建立對象的種類。并通過複制這個原型建立新的對象。

原型模式的類圖如下:

設計模式--原型模式

原型模式類圖

原型模式是一種非常簡單的設計模式。用戶端知道抽象Prototype類,在運作時,抽象Prototype子類的任何對象都可以按用戶端的意願被複制。是以,無需手工建立就可以制造同意類型的多個執行個體。

Prototype聲明了複制自身的接口。作為Prototype的子類,ConcretePrototype實作了Concrete複制自身的clone操作。

這裡,用戶端通過請求原型複制其自身,建立了一個新的對象。

何時使用原型模式?

在以下情形,會考慮使用原型模式:

  1. 需要建立的對象獨立于其類型與建立的方式;
  2. 執行個體化的類是在運作時決定的;
  3. 不想要與産品層次相對應的工廠層次;
  4. 不同類的執行個體間的差異僅是狀态的若幹組合,這樣複制相應數量的原型比手工執行個體化更加友善;
  5. 類不容易建立,比如每個元件可把其他元件作為子節點的組合對象,複制已有的組合對象并對副本進行修改會更加容易。

使用Cocoa Touch架構中的對象複制

值得注意的是:淺複制與深複制的差別
淺複制隻是複制了對象的指針,而同時指向相同的對象資源,也就是說隻是複制了棧裡面的内容,而同時指向相同的堆空間。改變其對象值得時候,複制對象間會互相影響。
深複制是同時複制對象的指針跟對象本身,也就是同時複制了堆棧空間的内容。

Cocoa Touch架構為

NSObject

的派生類提供了實作深複制的協定。

NSObject

的子類需要實作

NSCopying

協定及其方法

-(id)copyWithZone:(NSZone *)zone

NSObject

有一個執行個體方法叫

-(id)copy

。預設的

copy

方法調用

[self copyWithZone:nil]

。對于采納了

NSCopying

協定的子類,需要實作這個方法。否則将引發異常。iOS中,這個方法保持新的副本對象,然後将其傳回。

附上原型模式的Demo:

DesignPattern_Prototype

喜歡我的可以關注收藏我的個人部落格:

RobberJJ

繼續閱讀