一.小结
- 定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。
- 优点: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(); } }