门面模式也叫做外观模式,是一种比较常用的封装模式,其定义如下:
Provide a unifield interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the
subsystem easier to use.
要求一个子系统的外部与其内部的通信必须通过一个系统一个对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生
门面模式的角色:
1.Facade门面角色:客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的
请求委派到相应的子系统中去,也就是说该角色没有实际的业务逻辑,只是一个委托。
2.subsystem子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存
在。对于子系统而言,门面仅仅是另外一个客户端而已。
//子系统 public class ClassA{ public void doSomething(){ //..... } } public class ClassB{ public void doSomething(){ //..... } } public class ClassC{ public void doSomething(){ //..... } } //门面对象 public class Facade{ private ClassA a=new ClassA(); private ClassB b=new ClassB(); private ClassC c=new ClassC(); //提供给外部访问的方法 public void methodA(){ this.a.doSomethingA(); } public void methodB(){ this.b.doSomething(); } public void methodC(){ this.c.doSomething(); } }
门面模式的优点:
1.减少系统的相互依赖
2.提高了灵活性
3.提高安全性:想访问系统的那些业务就开通哪些逻辑,不再门面中开通的方法无法访问
缺点:
门面模式最大的缺点就是不符合开闭原则,对修改关闭,对扩展开放
门面模式的使用场景:
1.为一个复杂的模块或子系统提供一个供外界访问的接口
2.子系统相对独立——————外界对子系统的访问只要黑箱操作即可
3.预防低水平人员带来的风险扩散