外觀模式

dongpingwang發表於2020-12-12

一.小結

  • 定義:要求一個子系統的外部與其內部的通訊必須通過一個統一的物件進行。外觀模式提供一個高層次的介面,使得子系統更易於使用。
  • 優點:1.減少系統的相互依賴 2.提高了靈活性 3.提高安全性
  • 缺點:不符合開閉原則,如果外觀物件出現錯誤後只能修改外觀物件
  • 使用場景:1.為複雜的模組或子系統提供一個對外界訪問的介面 2.子系統相對獨立 3.預防低水平人員帶來的風險擴散
  • 注意事項:外觀物件不參與子系統內的業務邏輯。
  • 通用UML圖

二.例子

  平時我們去商店買東西,用手機掃櫃檯上的收款碼用微信或者支付寶付款,這一過程對商家來說,收款碼相當於外觀物件,微信或者支付寶收款相當於子系統。下面模擬這情景:

  • 收款方式介面(子系統介面)

    public interface ICollectMoney {
        void collect();
    }
    
  • 微信收款和支付寶收款(子系統)

    public class WXCollectMoney implements ICollectMoney {
    
        @Override
        public void collect() {
            System.out.println("微信到賬10元");
        }
    }
    
    public class AliPayCollectMoney implements ICollectMoney {
    
        @Override
        public void collect() {
            System.out.println("支付寶到賬10元");
        }
    }
    
  • 外觀物件

    public class CounterCode {
        private ICollectMoney wx, alipay;
    
        public CounterCode() {
            wx = new WXCollectMoney();
            alipay = new AliPayCollectMoney();
        }
    
    
        public void wxCollect() {
            wx.collect();
        }
    
        public void alipayCollect() {
            alipay.collect();
        }
    }
    
  • 情景類

    public class Client {
        public static void main(String[] args) {
            // 我們平時去商店買東西,用微信或者支付寶付款過程
            CounterCode counterCode = new CounterCode();
            counterCode.alipayCollect();
        }
    }
    

相關文章