【設計模式】(十六)--結構型模式--外觀模式

【設計模式】(十六)–結構型模式–外觀模式

外觀模式定義

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("添加肉絲");
    }
}

結果
在這裏插入圖片描述
實現解讀
晚餐,包菜肉絲,對外屏蔽了整個晚餐的製作過程,僅需要創建晚餐即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章