小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

IOS設(shè)計模式淺析之外觀模式(Facade)

 昵稱10504424 2014-01-14

引言  

  在項目開發(fā)中,有時候會遇到這樣的一種情景:已有系統(tǒng)的各個子系統(tǒng)之間,隨著業(yè)務需求的發(fā)展,有了比較緊湊的耦合關(guān)系。現(xiàn)在需要利用這些子系統(tǒng)的功能,為移動端提供業(yè)務處理。我們該怎么應對這樣的業(yè)務需求呢?這就是本章外觀模式所要解決的問題。

  進入正式講解前,我們先來分析一下兩種應對如上業(yè)務需求的方式:

  方式一:移動端直接調(diào)用各個子系統(tǒng)的功能,和各個子系統(tǒng)之間形成緊耦合的關(guān)系,如下圖所示:

  方式二:提供一個高層接口,該高層接口負責和子系統(tǒng)進行交互,并向移動端提供需要使用的接口,如下圖所示:

  從上面兩種方式的圖式結(jié)構(gòu)可以看到,對移動端來說,方式二比方式一要好用很多,因為在方式二中,移動端不需要知道各個子系統(tǒng)的邏輯,只需要和高層接口交互就可以了。實際上方式二,就是我們這里要說的外觀模式了。

定義

  “為子系統(tǒng)中的一組接口提供一個統(tǒng)一的接口。外觀模式定義了一個更高層次的接口,這個接口使得這一子系統(tǒng)更加容易使用?!?/strong>

  最初的定義出現(xiàn)于《設(shè)計模式》(Addison-Wesley,1994)。

  這個定義,通過上面引言的圖示講解,應該很好理解了,這里再分析一下定義中的兩個重要角色:

  外觀角色:就是引言圖示中的“高層接口”,客戶端可以調(diào)用這個角色的方法;另外,該角色知道相關(guān)的子系統(tǒng)的功能和責任。

  子系統(tǒng)角色:可以同時有一個或者多個子系統(tǒng)。每一個子系統(tǒng)都不是一個單獨的類,而是一個類的集合。每一個子系統(tǒng)都可以被客戶端直接調(diào)用,或者被外觀角色調(diào)用。

結(jié)構(gòu)圖

示例

  生活中,應用外觀模式的例子很多,比如去飯館吃飯,我們不需要關(guān)注菜的選料、烹調(diào)等過程,只需要和服務員進行交互:服務員給我們菜譜(相當于就是外觀模式的高級接口),我們選菜(調(diào)用接口),就可以享受美食。

  這里,我們用另一個生活中的例子來進行解說。不知道大家有沒有通過旅行社報團出去旅游的經(jīng)歷?這是一個很好的外觀模式的應用。我們選擇好景點之后,旅行社會幫我們聯(lián)系大巴、旅館、飯店、景點門票以及景點服務等事情,這些事情我們都不需要親自去安排,這就是外觀模式的便利之處:可以使得客戶端的接口更簡單。

  下面列出應用外觀模式實現(xiàn)旅行社報團旅游的結(jié)構(gòu)圖:

  如果不應用外觀模式,我們(上圖中的Client),就得自己去聯(lián)系交通工具、預定旅館、飯館、景點門票等,相信這樣的旅程,大家會感覺很累。有了外觀角色(上圖中的Facade),它會幫我們?nèi)ヌ幚磉@些事情。完整代碼大家可以下載查看,這里只貼出部分源碼。

  Facade.m(部分源碼):

  從源碼可以看到,外觀類調(diào)用了交通工具類、旅館類、飯館類、景點類。下面看看客戶端調(diào)用代碼:

  客戶端代碼只需要和外觀類進行交互。

  下載源碼

小結(jié)

  通過上面的講解,我們來分析一下外觀模式的特點:

  根據(jù)外觀模式的特點,我們可以在以下情況中使用Facade模式:

  返回目錄

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多