設計模式之Facade
面向對象設計:
概念:
對象封裝不僅是「數據隱藏」,而是「隱藏一切」。
門面模式(Facade):
功能:將用戶與系統內部複雜的細節相互屏蔽,並只為用戶提供簡化後的更容易使用的外部介面。同時它也將系統內部代碼與介面子系統的代碼相互解耦,以便修改和升級系統代碼。
注意:
1. 不要在一開始就創建門面層。如果你覺得以後子系統會不斷變化,並變得更複雜,提早創建門面層會造成難以創建子類和完成介面命名。你最好在子系統變得複雜之後,再去應用門面模式。
2. 子系統並不會意識到門面層的存在,同樣也不應在子系統內對門面層進行引用。
3. 客戶端使用門面層時不需要再去直接訪問子系統內部對象。
例子:
任何典型的GUI都會有一個標題、菜單項和中間內容顯示區域。現在我們有如下各個類,它們能提供基本的功能。
public class GUIMenu{ public void drawMenuButtons(){}}public class GUITitleBar{ public void showTitleBar(String caption){}}public class GUIContent{ public void showButtons(){} public void showTextFields(){} public void showDefaultValues(){}}
現在,如果想為用戶創建一套簡單的GUI介面來實現以上這些類的功能。我們可以實現這樣一個門面層。
public class MyGUI{ private GUIMenu menu; private GUITitleBar titleBar; private GUIContent content; public MyGUI(){ menu = new GUIMenu(); titleBar = new GUITitleBar(); content = new GUIContent(); } public void drawGUI(){ content.showButtons(); content.showTextFields(); content.showDefaultValues(); menu.drawMenuButtons(); titleBar.showTitleBar("Title of the GUI"); }}
若要創建一個GUI,用戶通過一組簡單命令即可。
public class TestFacade{ public static void main(String args[]){ MyGUI facade = new MyGUI(); facade.drawGUI(); }}
在這種情況下,代碼的實現完全交給門面層處理。客戶端只會與一個介面交互,同時也只有和這個介面交互的許可權。這樣可以隱藏全部系統的複雜性。
推薦閱讀:
※編程的思考其二
※為生命重新編程(12.10.17)
※好的習慣,助你從程序亂麻中解脫
※Python3 函數04
※史上最清晰的「Android觸摸事件傳遞機制」圖解,一張圖全懂了!