GOF23之外觀模式

一、核心作用:

  1. 外觀模式提供一個統一的接口,用來訪問系統中的一羣接口,這個接口使得一羣接口易於管理
  2. 爲子系統提供一個入口,封裝子系統的複雜性,便於客戶調用
  3. 外觀模式定義了一個高層的接口,讓子系統更容易的使用
  4. 違背了開閉原則
  5. 符合迪米特原則(Low of Demeter 最少知道原則):一個軟件實體應當儘可能少的與其他實體發生相互作用

在這裏插入圖片描述

二、常見應用場景:

1、JDBC工具類

三、代碼示例:

在這裏插入圖片描述

一、子系統:
package com.hezeu.facade;

public interface 稅務局 {
    void taxCertificate();  //辦理稅務登記證
}


class 海淀稅務局 implements 稅務局 {

    @Override
    public void taxCertificate() {
        System.out.println("在海淀稅務局辦理稅務登記證!");
    }
}
二、外觀封裝類:
package com.hezeu.facade;

/**
* @Classname RegisterFacade
* @Description TODO
* @Date 2020/2/23 下午 09:59
* @Created by 朱進博 [email protected]
*/
public class RegisterFacade {
        public void register(){
                工商局  a = new 海淀區工商局();
                a.checkName();
                質檢局 b = new 海淀質檢局();
                b.orgCodeCertificate();
                稅務局  c  = new 海淀稅務局();
                c.taxCertificate();
                銀行  d = new 中國工商銀行();
                d.openAccount();
        }
}
三、測試類:
package com.hezeu.facade;

/**
* @Classname Client
* @Description TODO
* @Date 2020/2/23 下午 10:02
* @Created by 朱進博 [email protected]
*/
public class Client {
        public static void main(String[] args) {
                new RegisterFacade().register();
        }
}
結果如下:

在這裏插入圖片描述

四、外觀模式的優缺點:

優點:
引入外觀模式,使客戶對子系統的使用變得簡單,減少了與子系統的關聯對象,實現了子系統與客戶之間的松耦合關係
只提供了一個訪問子系統的統一接口,不應i想用戶直接使用子系統類
降低了大型軟件系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程
缺點:
不能很好的限制客戶使用子系統類,如果對客戶訪問子系統類做了太多限制則減少了可變性和靈活性
在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶端原代碼,違背了開閉原則

感謝閱讀,水平有限,如有錯漏,還請不吝賜教

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