設計模式--外觀模式

  1. 外觀模式的目的在於如何簡化接口,可以將多個類的複雜的一切隱藏在背後,值顯露一個乾淨美觀的外觀。

  2. 所謂的外觀模式就是提供一個統一的接口,用來訪問子系統中的一羣接口。

  3. 外觀模式定義了一個高級接口,讓子系統更容易使用,

  4. 外觀模式的UML圖

    在這裏插入圖片描述

  5. 外觀模式的代碼實現

    1. 創建3個子部件

      /**
       * 子系統角色:空調
       */
      public class Air {
      
          public void open(){
              System.out.println("開空調");
          }
      
          public void shutDown(){
              System.out.println("關空調");
          }
      }
      
      /**
       * 子系統角色:燈
       */
      public class Light {
      
          public void open(){
              System.out.println("開燈");
          }
      
          public void shutDown(){
              System.out.println("關燈");
          }
      }
      
      /**
       * 子系統角色:電視
       */
      public class Tv {
      
          public void open(){
              System.out.println("開電視");
          }
      
          public void shutDown(){
              System.out.println("關電視");
          }
      }
      
    2. 創建外觀類

      /**
       * 包裝了子部件,隱藏了子部件
       */
      public class Facade {
      
          private Air air;
          private Tv tv;
          private Light light;
      
          public Facade(Air air, Tv tv, Light light) {
              this.air = air;
              this.tv = tv;
              this.light = light;
          }
      
          //一鍵打開
          public void allOpen(){
              air.open();
              tv.open();
              light.open();
          }
      
          public void allDown(){
              air.shutDown();
              tv.shutDown();
              light.shutDown();
          }
      
      }
      
    3. 創建測試類

      public class Test {
          public static void main(String[] args) {
              Air air = new Air();
              Tv tv = new Tv();
              Light light = new Light();
      
              Facade facade = new Facade(air, tv, light);
              facade.allOpen();
              facade.allDown();
          }
      }
      
  6. 外觀模式的優點

    1. 使客戶對系統的使用變簡單了,減少了與子系統的關聯對象,實現了子系統與客戶之間的鬆耦合關係。
    2. 只是提供了一個訪問子系統的統一入口,並不影響用戶直接使用子系統類
    3. 降低了大型軟件系統中的編譯依賴性,並簡化了系統在不同平臺之間的移植過程
  7. 外觀模式的缺點

    1. 不能很好的限制客戶使用子系統類,如果對客戶訪問子系統做太多的限制會減少系統的可變性和靈活性
    2. 在不映入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶類端的源代碼,違背了”開閉原則“
  8. 外觀模式的使用場景

    1. 當要爲一個複雜子系統提供一個簡單接口時可以使用外觀模式
    2. 客戶端與多個子系統之間存在很大的依賴性,引入外觀模式將子系統與客戶以及其他子系統解耦,可以提高子系統的獨立性和可移植性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章