iOS設計模式——原型

何爲原型模式?設計模式

    原型模式是一種很是簡單的設計模式。客戶端知道抽象Prototype類。在運行時,抽象Prototype子類的任何對象均可以按客戶端的意願被複制。所以無需手工建立就能夠製造同一類型的多個實例。說明它們之間靜態關係的類圖以下:框架


    Prototype聲明瞭複製自身的接口。做爲Prototype的子類,ConcretePrototype實現了Concrete複製自身的clone操做。這裏的客戶端經過請求原型複製其自身,建立一個新的對象。spa

    原型模式:使用原型實例指定建立對象的種類,並經過複製這個原型建立新的對象。設計

什麼時候使用原型模式?指針

    @:須要建立的對象應獨立於其類型與建立方式。對象

    @:要實例化的類是在運行時決定的。接口

    @:不想要與產品層次相對應的工廠層次。內存

    @:不一樣類的實例間的差別僅是狀態的若干組合。所以複製相應數量的原型比手工實例化更加方便。資源

    @:類不容易建立,好比每一個組件可把其餘組件做爲子節點的組合對象。複製已有的組合對象並對副本進行修改會更加容易。原型

    此模式的最低限度是生成對象的真實副本,以用做同一環境下其餘相關事物的基礎。

淺複製與深複製

    淺複製:只複製了指針,而沒有複製實際資源。

    深複製:不只複製指針,還複製指針指向的資源。

在Cocoa Touch框架中的對象複製

    Cocoa Touch框架爲NSObject的派生類提供了實現深複製的協議。NSObject的子類須要實現NSCopying協議及其方法——(id)copyWithZone:(NSZone *)zone。NSObject有一個實例方法叫作(id)copy。默認的copy方法調用[self copyWithZone:nil]。對於採納了NSCopying協議的子類,須要實現這個方法,不然將引起異常。iOS中,這個方法保持新的副本對象,將其返回。此方法的調用者要負責釋放返回的對象。

    多數狀況下,深複製的實現看起來並不複雜。其思路是複製必需的成員變量與資源,傳給此類的新實例,而後返回這個新實例,而後返回這個新實例。技巧在於保證確實複製了內存中的資源,而不僅是指針值。

相關文章
相關標籤/搜索