目前你有 persistencymanager 來在本地儲存**資料,httpclient 處理遠端通訊。專案中其它的類跟這些邏輯都沒關。
執行這個模式
,只有 libraryapi 來儲存 persistencymanager 和 httpclient 的例項。之後,libraryapi 將會公開乙個簡單的 api 來訪問這些服務。
這個設計就像下圖:
開啟 libraryapi.h,在頂部引入面檔案:
#import "album.h"
接下來,在 libraryapi.h下面新增如下方法:
- (nsarray*)getalbums;
- (void)addalbum:(album*)album atindex:(int)index;
- (void)deletealbumatindex:(int)index;
現在,這些方法都公開給了其它類。
在 libraryapi.m 檔案引入如下兩個檔案:
只有在這個地方你才會需要引入這些類。記住:你的 api 將會是你「複雜」系統的唯一的接入點。
現在新增一些私有屬性在你的類的擴充套件裡(在 @implementation 上面)
@inte***ce libraryapi ()
@end
isonline 用來判斷,如果**列表資料發生變化是否能夠更新到伺服器,例如新增或者刪除**。
你現在需要在 init 方法中初始化這些變數,在 libraryapi.m 中新增下面**:
- (id)init
return self;
}
這個 http 客戶端在這裡並不真正的工作,它只是在外觀設計裡面起乙個示範用法的作用,所以 isonline 永遠是 no 了。
接下來,在 libraryapi.m 裡面新增下面三個方法:
- (nsarray*)getalbums
- (void)addalbum:(album*)album atindex:(int)index
}- (void)deletealbumatindex:(int)index
}
看一下 addalbum:atindex:。這個類首先更新本地資料,如果聯網,它再更新遠端伺服器。這就是外觀設計的長處;當一些系統外的類新增了乙個新**,它不知道─也不需要知道─複雜的內部系統。
執行你的程式,你會看乙個黑底空白內容的螢幕,像下面這樣:
你需要在螢幕上顯示一些**資料─這就需要使用到下面乙個設計模式:裝飾器 (decorator)。
facade設計模式
facade 外 觀模式,是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合 面臨很多變化的挑戰。在這裡我想舉乙個例子 比如,現在有一輛汽車,我們 客戶程式 要啟動它,那我們就要發動引擎 子系統 1 使四個車輪 子...
Facade設計模式
facade模式也叫外觀模式,是由gof提出的23種設計模式中的一種。facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。本文介紹設計模式中的外觀 facade 模式的概念,用法,以及實際應用中怎麼樣使用facade模式進...
Facade 設計模式
目的 解決的問題 客戶端需要乙個簡化的介面來覆蓋複雜的子系統的總體功能。討論facade 設計模式通過乙個單一的介面物件來封裝乙個複雜的子系統。這樣減少了學習子系統複雜的學習曲線。它也實現了不同潛在客戶端的低依賴性和解耦。換句話說,如果facade 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...