外觀模式——讓生活看起來更簡單

目錄

一、基礎簡介

1、定義

2、使用場景

3、優缺點

 4、結構圖

二、“買房”的外觀模式實例

1、“買房”的過程圖

2、SubSystem 子系統角色

3、Facade

4、Client_Facade

5、結果


一、基礎簡介

1、定義

爲子系統中的一組接口提供一個一致的界面;
定義一個高層接口,使得這一子系統更加容易使用

2、使用場景

  • 1、爲複雜的模塊或子系統提供外界訪問的模塊。
  • 2、降低訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之的接口。

3、優缺點

外觀(Facade)模式是“迪米特法則”的典型應用,它有以下主要優點。

  1. 降低了子系統與客戶端之間的耦合度,使得子系統的變化不會影響調用它的客戶類。
  2. 對客戶屏蔽了子系統組件,減少了客戶處理的對象數目,並使得子系統使用起來更加容易。
  3. 降低了大型軟件系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程,因爲編譯一個子系統不會影響其他的子系統,也不會影響外觀對象。

外觀(Facade)模式的主要缺點如下。

  1. 不能很好地限制客戶使用子系統類。
  2. 增加新的子系統可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。

 4、結構圖

外觀(Facade)模式包含以下主要角色。

  1. 外觀(Facade)角色:爲多個子系統對外提供一個共同的接口。
  2. 子系統(Sub System)角色:實現系統的部分功能,客戶可以通過外觀角色訪問它。
  3. 客戶(Client)角色:通過一個外觀角色訪問各個子系統的功能。

二、“買房”的外觀模式實例

1、“買房”的過程圖

在買房的過程中,客戶的操作是比較繁瑣的,這個時候找到Facade外觀類(也就是現實生活中的中介),就可以簡單的搞定

2、SubSystem 子系統角色

package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem01_SelectRoom {

    public void selectRoom(){
        System.out.println("客戶選擇好了房源");
    }
}
package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem02_Sign {

    public void sign(){
        System.out.println("簽訂購房合同");
    }
}
package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem03_Procedure {

    public void procedure(){
        System.out.println("辦理一系列手續");
    }
}
package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem04_Tollage {

    public void tollage(){
        System.out.println("交稅");
    }
}
package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:21
 */
public class SubSystem05_Credential {

    public void credential(){
        System.out.println("拿到房產證");
    }
}

3、Facade

package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:37
 */
public class Facade_BuyRoom {

    private SubSystem01_SelectRoom selectRoom;
    private SubSystem02_Sign sign;
    private SubSystem03_Procedure procedure;
    private SubSystem04_Tollage tollage;
    private SubSystem05_Credential credential;

    // 需要知道子系統的細節
    public Facade_BuyRoom() {
        selectRoom = new SubSystem01_SelectRoom();
        sign = new SubSystem02_Sign();
        procedure = new SubSystem03_Procedure();
        tollage = new SubSystem04_Tollage();
        credential = new SubSystem05_Credential();
    }

    public void buyRoom(){
        System.out.println("買房開始");
        selectRoom.selectRoom();
        sign.sign();
        procedure.procedure();
        tollage.tollage();
        credential.credential();
        System.out.println("買房結束");
    }
}

4、Client_Facade

package com.mfc.design.外觀模式;

/**
 * @author MouFangCai
 * @date 2019/10/14 15:46
 */
public class Client_Facade {

    public static void main(String[] args) {
        Facade_BuyRoom facade_buyRoom = new Facade_BuyRoom();
        facade_buyRoom.buyRoom();
    }
}

5、結果

買房開始
客戶選擇好了房源
簽訂購房合同
辦理一系列手續
交稅
拿到房產證
買房結束

Process finished with exit code 0

 

 

發佈了101 篇原創文章 · 獲贊 177 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章