一.概念:
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
应用场景#
解决易用性问题,可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。
解决性能问题,通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高 App 客户端的响应速度。API 聚合就是属于这种,也是属于外观模式的应用
解决事务问题,通过门面模式可以方便的使得原本多个操作可以在一个事务内完成,如果中间某一个环节操作失败,可以回滚事务,撤销变更。
二:
Facade: 外观类,知道哪些子系统类负责处理请求,将请求代理给对应的子系统对象
SubSystem Classes,实现子系统中的功能,处理 Facade 指派的任务,和 Facade 没有关联关系,没有继承,也不会引用 Facade
public class SubSystem1 { public void MethodA() { System.out.println("MethodA in SubSystem1"); } public void MethodB() { System.out.println("MethodB in SubSystem1"); } } public class SubSystem2 { public void MethodA() { System.out.println("MethodA in SubSystem2"); } public void MethodB() { System.out.println("MethodB in SubSystem2"); } } public class SubSystem3 { public void MethodA() { System.out.println("MethodA in SubSystem3"); } public void MethodB() { System.out.println("MethodB in SubSystem3"); } } public class Facade { private SubSystem1 _subSystem1 = new SubSystem1(); private SubSystem2 _subSystem2 = new SubSystem2(); private SubSystem3 _subSystem3 = new SubSystem3(); public void MethodA() { _subSystem1.MethodA(); _subSystem2.MethodA(); _subSystem3.MethodA(); } public void MethodB() { _subSystem1.MethodB(); _subSystem2.MethodB(); _subSystem3.MethodB(); } }
测试:
1 public class main { 2 public static void main(String arges[]) { 3 Facade facade=new Facade(); 4 facade.MethodA(); 5 facade.MethodB(); 6 7 }
MethodA in SubSystem1
MethodA in SubSystem2
MethodA in SubSystem3
MethodB in SubSystem1
MethodB in SubSystem2
MethodB in SubSystem3