外觀模式:為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。
人如其名,我們一看外觀設計模式(門面設計模式)uml圖就能立刻領會到該設計模式的用處。
我們在做開發的設計初期階段,應該有意識的將不同的兩個層分離,比如經典的三層架構,就需要考慮在資料訪問層和業務邏輯層、業務邏輯層和表示層的層與層之間建立外觀facade,這樣可以為複雜的子系統提供乙個簡單的介面,使得耦合大大降低。其次,在開發階段,子系統往往因為不斷的重構演化變得越來越複雜,大多數的模式使用時也都會產生很多很小的類,這本是好事,但也給外部呼叫它們的使用者程式帶來了使用上的困難,增加外觀facade可以提供乙個簡單的介面,減少它們之間的依賴。第三,在維護乙個遺留的大型系統時,可能這個系統已經非常難以維護和擴充套件了,但因為它包含非常重要的功能,新的需求開發必須要依賴於它。此時用外觀模式facade也是非常合適的。你可以為新系統開發乙個外觀facade類,來提供設計粗糙或高度複雜的遺留**的比較清晰的介面,讓新系統與facade物件互動,facade與遺留**互動所有複雜的工作。
接下來我們看著uml圖把**寫出來:
public class subsystemone
}public class subsystemtwo
}public class subsystemthree
}public class subsystemfour
}public class facade
public void methoda()
public void methodb()
}public void main(string args)
其實有好多同學反應,感覺設計模式之間貌似很相似,往往學的越多越迷糊,基於此我想告訴大家的是我們之所以總結就是讓我們在總結的過程中去重新感受,感受什麼呢?感受模式的出彩點或是不同點。比如上述**中,相信大部分同學看來都會覺得無壓力,沒錯,外觀模式確實不複雜,但是我們要注意它的不同點,就是外觀類facade的建構函式部分,學過其他設計模式的童鞋相信對這裡不陌生吧,比如裝飾模式,在裝飾模式中此處是將別的物件聚合進來的,而這裡是將子系統引用進來的(何為聚合何為引用,讀者可參照之前的設計模式總結中的**去比較體會),建議大家自己總結的過程中需要注意三點:1.該模式的用處2.該模式的uml圖中各個類之間的確切關係以及實現。3.總結過程中去思考該模式在實際框架原始碼中的應用。
這裡是因為facade外觀類需要了解子系統的方法或屬性,進行組合,以備外界使用。由於facade的作用,客戶端可以根本不知三個子系統類的存在。
Java設計模式之外觀模式 門面模式
外觀模式 facade pattern 隱藏系統的複雜性,並向客戶端提供了乙個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增乙個介面,來隱藏系統的複雜性。public class drawerone public void getkey public class dr...
設計模式之外觀 門面模式
場景 假設積分兌換物品流程,一共有三部分別依賴三個子系統 1.積分校驗系統,檢視是否有資格。2.積分支付系統,兌換禮物,扣減積分等。3.物流系統,兌換禮物後,進行配送流程。禮物實體類 public class pointsgift public string getname public void ...
PHP設計模式之外觀(門面)模式
外觀模式 只是為乙個分層或子系統建立乙個單一的入口。外觀類,它需要了解所有的子系統的方法或屬性,進行組合,以備外界呼叫 class facade function methoda function methodb function methodn facade new facade facade m...