一、定义
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
二、优点及缺点
优点:
1、减少系统相互依赖。
2、提高灵活性。
3、提高了安全性。
缺点:
1、不符合开闭原则,更改东西比较复杂。
三、代码实现:
三个子系统角色:
package com.example.demo.sjms.waiguanmoshi; /** * @Author: caesar * @Date:2020年10月19日 19:10:47 * @Description: 类A */ public class ClassA { public void methodA(){ System.out.println("这是方法methodA!!!"); } }
package com.example.demo.sjms.waiguanmoshi; /** * @Author: caesar * @Date:2020年10月19日 19:10:47 * @Description: 类B */ public class ClassB { public void methodB(){ System.out.println("这是方法methodB!!!"); } }
package com.example.demo.sjms.waiguanmoshi; /** * @Author: caesar * @Date:2020年10月19日 19:10:47 * @Description: 类C */ public class ClassC { public void methodC(){ System.out.println("这是方法methodC!!!"); } }
外观者角色:
package com.example.demo.sjms.waiguanmoshi; /** * @Author: caesar * @Date:2020年10月19日 19:10:23 * @Description: 外观者 */ public class Facade { private ClassA classA; private ClassB classB; private ClassC classC; public Facade(){ this.classA = new ClassA(); this.classB = new ClassB(); this.classC = new ClassC(); } // 统一方法 public void allMethod(){ classA.methodA(); classB.methodB(); classC.methodC(); } }
测试方法:
package com.example.demo.sjms.waiguanmoshi; /** * @Author: caesar * @Date:2020年10月19日 19:10:48 * @Description: 测试类 */ public class Test { public static void main(String[] args) { Facade facade = new Facade(); facade.allMethod(); } }
四、源码级别
1、java中的Class类:
方法调用了ClassLoader、System的方法。
2、javax.faces.webapp.FacesServlet
FacesServlet实现了Servlet接口,在实现方法service()中调用了HttpServletRequest、HttpServletResponse、ApplicationContext接口的方法。
五、总结
使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。