【設計模式】(十六)–結構型模式–外觀模式
外觀模式定義
Provide a unified interface a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.
意思是爲一個子系統的一組接口提供了統一的接口。外觀模式提供了一個更高層次的接口,是的子系統更容易使用。
外觀模式也叫門面模式。
外觀模式通常有3個元素
- Facade 子系統接口
- Subsystem 子系統中定義的類
- Client 子系統客戶端代碼
外觀模式示意圖
在使用分佈式的時候,領域劃分好後對外輸出接口都是基礎接口,實際業務邏輯通常是多個基礎接口的組合,所以通常會設置一個門面服務作爲對外統一的輸出接口,屏蔽細節,讓輸出接口容易理解使用,同時提升底層系統的安全性。
外觀模式的優點
- 1、減少系統相互依賴。
- 2、提高靈活性。
- 3、提高了安全性。
外觀模式的使用場景
- 1、爲複雜的模塊或子系統提供外界訪問的模塊。
- 2、子系統相對獨立。
- 3、預防低水平人員帶來的風險。
外觀模式的簡單實現
類圖
實現
public class Test {
public static void main(String[] args) {
Dinner dinner = new Dinner();
dinner.getDinner();
}
}
public class Dinner {
private Cabbage cabbage = new Cabbage();
private Pork pork = new Pork();
private Oil oil = new Oil();
private Cooker cooker = new Cooker();
public void getDinner() {
cabbage.getCabbage();
pork.getPork();
cooker.prepare();
oil.addOil();
pork.addPork();
cabbage.addCabbage();
cooker.finish();
System.out.println("炒菜完成,晚餐備好,準備吃飯");
}
}
public class Cabbage {
public void getCabbage() {
System.out.println("購買包菜");
System.out.println("清洗包菜");
System.out.println("包菜切塊");
}
public void addCabbage() {
System.out.println("添加包菜");
}
}
public class Cooker {
public void prepare() {
System.out.println("廚具準備,開始烹飪");
}
public void finish() {
System.out.println("烹飪結束");
}
}
public class Oil {
public void addOil() {
System.out.println("添加食用油");
}
}
public class Pork {
public void getPork() {
System.out.println("購買豬肉");
System.out.println("清洗豬肉");
System.out.println("豬肉切絲");
}
public void addPork() {
System.out.println("添加肉絲");
}
}
結果
實現解讀
晚餐,包菜肉絲,對外屏蔽了整個晚餐的製作過程,僅需要創建晚餐即可。