java23種設計模式-門面(外觀)模式
阿新 • • 發佈:2018-12-13
定義
外觀模式為子系統的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
UML
角色
- 子系統(SubSystem): 表示一個系統的子系統或者模組
- 門面(Facade): 客戶端通過門面間接控制子系統。門面遮蔽了客戶端無需知道的細節,簡化了呼叫過程。
示例
我們使用的電腦的使用者桌面便是一個很好的例子。桌面充當門面角色,使用者使用的各應用可以看作子系統的不同組成部分。
/** * desc : qq * Created by tiantian on 2018/10/6 */ public class QQ { public void init() { System.out.println("QQ is initing."); } public void startUp() { init(); run(); } public void run() { System.out.println("QQ is runing."); } public void quit() { System.out.println("QQ is shutdown."); } }
/** * desc : 音樂播放器 * Created by tiantian on 2018/10/6 */ public class Itunes { public void init() { System.out.println("Itunes is initing."); } public void startUp() { init(); run(); } public void run() { System.out.println("Itunes is playing music."); } public void quit() { System.out.println("Itunes is shutdown."); } }
/** * desc : 瀏覽器 * Created by tiantian on 2018/10/6 */ public class IE { public void init() { System.out.println("IE is initing."); } public void startUp() { init(); run(); } public void run() { System.out.println("IE is runing."); } public void quit() { System.out.println("IE is shutdown."); } }
/**
* desc : 電腦桌面(系統的門面)
* Created by tiantian on 2018/10/6
*/
public class Desktop {
private QQ qq = new QQ();
private Itunes itunes = new Itunes();
private IE ie = new IE();
public void startUpQQ() {
qq.startUp();
}
public void quitQQ() {
qq.quit();
}
public void startUpItunes() {
itunes.startUp();
}
public void quitItunes() {
itunes.quit();
}
public void startUpIe() {
ie.startUp();
}
public void quitIe() {
ie.quit();
}
}
總結
門面模式的好處很多,首先客戶端不用直接依賴子系統各模組,而是通過門面角色發生關聯,鬆散了兩者之間的耦合,同時也符合迪米特原則。其次,對於客戶端來說使用非常便捷。缺點也很明顯,不符合開閉原則,如果子系統增加了模組,則不得不更改門面類。