IOS設計模式學習(3)原型模式

來源:互聯網
上載者:User

1 前言
在許多物件導向的應用程式中,有些對象的建立代價過於大或者過於複雜。要是可以重建相同的對象並作輕微的改動,事情會容易許多。我們可以通過輕微的改動重用已有的對象,以適應程式中的特定情況。今天我們就來學習一下該模式。

2 詳述
2.1 定義
應用於“複製”操作的模式成為原型(Prototype)模式。複製(cloning)指用同一模具生產一系列的產品。模具所基於的物品稱為原型。儘管產品是用同一模具複製的,但是某些屬性,如顏色與尺寸,可以稍有不同,但是他們還是屬於同一類。

2.2 何時是用原型模式
(1)需要建立的對象應獨立於其類型與建立方式。

(2)要執行個體化的類是在運行時決定的。

(3)不想要與產品層次相對應的工廠層次。

(4)不同類的執行個體間的差異僅是狀態的若干組合。因此複製相應數量的原型比手工執行個體化更加方便。

(5)類不容易建立,比如每個組件可以把其他組件作為子節點的組合對象。複製已有的組合對象並對副本進行修改會更加容易。

此模式的最低限度是產生對象的真實副本,以用作同一環境下其他相關事物的基礎(原型)。

2.3 淺複製與深複製
如果對象有個指標型成員變數指向記憶體中的某個資源,那麼如果複製這個對象呢?指標只是儲存記憶體中資源地址的預留位置。如果複製操作中,只是將指標複製給新對象(副本),那麼底層的資源是架上仍然由兩個執行個體在共用。

因此只複製了指標而不是實際資源,這成為淺複製。

深複製是指不僅複製指標值,還複製指標所指向的資源。不只是簡單的複製資源指標,還要產生記憶體中實際資源的真正副本。因此副本對象的指標指向了記憶體中不同位置的統一資源(內容)的副本。

2.4Cocoa Touch架構中的對象複製
CocoaTouch架構為NSObject的衍生類別提供了實現深複製的協議。NSObject的子類需要實現NSCopying協議及其方法--(id)copyWithZone:(NSZone *)zone。NSObject有一個執行個體方法叫做(id)copy。預設的copy方法調用[selfcopyWithZone:nil]。對於採納了NSCopying協議的子類,需要實現這個方法,否則將引發異常。IOS中,這個方法保持新的副本對象,然後將其返回。此方法的調用者需要負責釋放返回的對象。

深複製的技巧在於:保證確實複製了記憶體中的資源,而不只是指指標。

 

3 結語
 以上是所有內容,希望對大家有所協助。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.