1. 程式人生 > >APP開發實戰46-設計模式介紹4

APP開發實戰46-設計模式介紹4

13.3.9備忘錄模式

備忘錄模式在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到儲存的狀態。

此模式的使用場景:

(1)需要儲存一個物件在某一時刻的狀態或部分狀態。

(2)如果用一個介面來讓其他物件得到這些狀態,將會暴露物件的實現細節並破壞物件的封裝性,一個物件不希望外界直接訪問其內部狀態,通過中間物件可以間接訪問其內部狀態。

如使用者把APP切換到後臺時,需要儲存當前介面的資料,以便切換回前臺時恢復資料,及遊戲和文字編輯中的存檔功能,可使用備忘錄模式。

13.3.10迭代器模式

迭代器模式提供一種方法順序訪問一個聚合物件中各個元素, 而又不需暴露該物件的內部表示。此模式適用於遍歷一個容器物件時,如陣列、連結串列和Map等。

13.3.11模板方法模式

模板方法模式定義了一個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

模板方法實際上是封裝一個固定流程,就像是一套執行模板一樣,第一步該做什麼,第二步該做什麼都已經在抽象類中定義好了。而子類可以有不同的演算法實現,在框架不被修改的情況下實現某些步驟的演算法替換,能夠定製流程中的某些或所有步驟。

此模式的使用場景:

(1)多個子類有公有的方法,且邏輯基本相同時。

(2)重要、複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細節功能則由各個子類實現。

如在控制元件中顯示圖片時,圖片可能來源於網路、記憶體或本地快取,但顯示圖片的整個流程是一樣的,顯示其他資料和圖片類似,都可以用模板方法模式。

13.3.12代理模式

代理模式為其他物件提供一個代理以控制對這個物件的訪問。

當無法或不想直接訪問某個物件或訪問某個物件粗耨困難時可以通過一個代理物件來間接訪問,為了保證客戶端使用的透明性,委託物件與代理物件需要實現相同的介面。

     iOS在不同介面間的傳值、Android的Binder和Notification機制都使用了代理模式。

參考:《Android原始碼設計模式解析與實戰》