1. 外观模式的定义:
外观模式,也叫作门面模式,是一种常见的封装模式,要求一个子系统外部与其内部的通信通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。
外观模式注重“统一的”接口,外部只能通过这个接口来访问子系统,除了这个接口不允许单独访问子系统的行为发生。
2. 外观模式的角色说明:
--Facade门面角色
此角色知晓子系统的所有功能和责任,一般情况下,本角色会把客户端发来的请求分配到各个子系统中去,这也说明此角色并没有实际的业务逻辑,只是一个委托类。
--SubSystemClasses子系统角色
可以同时有一个或多个子系统,一个子系统不是一个单独的类,而是一个类的集合。子系统不知道门面角色类的存在,对于子系统来说,门面角色类只是另一个客户端而已。
3. 通用实例代码:
子系统类:
public class ClassA { public void doSomethingA(){ System.out.println("do something a"); } }
public class ClassB { public void doSomethingB(){ System.out.println("do something b"); } }
public class ClassC { public void doSomethingC(){ System.out.println("do something c"); } }
门面角色类Facade:
public class Facade { //被委托对象 private ClassA ca; private ClassB cb; private ClassC cc; public Facade() { this.ca=new ClassA(); this.cb=new ClassB(); this.cc=new ClassC(); } //提供给外部的访问方法 public void doSomethingA(){ this.ca.doSomethingA(); } public void doSomethingB(){ this.cb.doSomethingB(); } public void doSomrthingC(){ this.cc.doSomethingC(); } }客户端测试类:
public class Test { public static void main(String[] args) { Facade fd=new Facade(); fd.doSomethingA(); fd.doSomethingB(); fd.doSomrthingC(); } }4.外观模式的优点:
a、减少系统间的依赖,所有的以来都是对门面对象的依赖,与子系统无关
b、提高了灵活性,不管子系统内部怎么变化,只要不影响门面对象,任你自由活动
c、提高安全性,想访问子系统的那些业务就在门面类开通哪些逻辑,不在门面上开通的方法,访问不到。