可以看到clIEnt的程式明顯乾淨多了
int main() {
TicketMachineFacade TMFacade;
TMFacade.billToTicket(Bill(100));
TMFacade.coinToTicket(Coin(10));
}
這表示旅客可以用更簡單的方式買票了。
Consequence
1.避免外界觸及子系統的元件,降低外界所要面對的物件數量,讓子系統更容易使用。
2.促成外界與子系統之間的低偶合性。在子系統裡,元件之間的耦合性往往都很高,降低耦合性會使原件更容易改變而不波及外界。Facade有助於將系統分層、將物件之間的依存關系分層,順便剔除復雜的、循環的依存關系;這對於需要將clIEnt和子系統分開制作的專案而言,是非常重要的性質。
對大型軟體系統來說,降低編譯方面的依存關系是非常重要的;子系統一有變動,大家都希望重新編譯的時間能越短越好。只要用Facade降低編譯依存關系,不僅能將重新編譯的動作局限在一小塊區域,更有利於軟體移植:只是重新編譯一塊子系統,不太需要其他地方也一起再編譯一遍。
3.如有必要,外界仍可直接接觸子系統內的類別,所以你可以在易用性與一般性之間做選擇。
Conclusion
或許你會覺得facade pattern沒什麽,的確,他只是一個概念而已,而且非常單純,但卻常常看的到。
Known use
1..Net Enterprise Library的DAAB
2..Net 2.0的My
3.網路架構的OSI模型