定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
Facade门面角色:知道所有子系统的功能和责任。客户所有的请求都是通过门面角色委派到子系统处理,而自身没有没有业务逻辑
subsystem子系统:可以有一个或多个子系统。每一个子系统是一个完整的功能模块,子系统不知道门面角色的存在,门面仅仅是一个客户端而已
门面将复杂的子系统整合为简单的接口对外使用
class A{
public void doSomeThingA(){ }
}
class B{
public void doSomeThingB(){ }
}
class C{
public void doSomeThingC(){ }
}
//门面类
class Facade {
private A a = new A();
private B b = new B();
private C c = new C();
public void methodA(){
a.doSomeThingA();
}
public void methodB(){
b.doSomeThingB();
}
public void methodC(){
c.doSomeThingC();
}
}
优点:
减少系统的相互依赖
提高灵活性
提高安全性
缺点:
门面类不符合开闭原则。当门面类出问题时,继承、覆写都解决不了问题,只能修改。
应用
为一个复杂的模块或子系统提供一个对外的访问接口
子系统相对独立,外界对子系统的访问时黑盒操作
预防低水平人员带来的风险扩散
注意事项
一个子系统可以有多个门面
门面不需要参与子系统内的业务逻辑