个人博客:打开链接
一、定义
要求一个子系统的外部与其内部的通讯必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更容易使用。
门面模式注重“统一的对象”,也就是说 提供了一个访问子系统的接口,除了这个接口,不允许有任何访子系统的行为发生。
二、类图
更简单的说,门面对象就是外界访问子系统内部的唯一通道,不管子系统是多么的杂乱无章,只要门面对象在,就可以做到“金玉其外,败絮其中”,也就是说该角色没有实际的业务逻辑,只是一个委托类。
Facade门面角色:客户端可以调用这个角色的方法。
subsystem子系统角色:可以同时有一个或者多个子系统,子系统并不知道门面的存在,对子系统而言,门面只是另外一个客户端而已。
门面:
public class Facade {
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
public void execute(){
a.methodA();
b.methodB();
c.methodC();
}
}
子系统:
public class ClassA {
public void methodA() {
System.out.println("执行子系统下A类的方法!");
}
}
public class ClassB {
public void methodB() {
System.out.println("执行子系统下B类的方法!");
}
}
public class ClassC {
public void methodC() {
System.out.println("执行子系统下C类的方法!");
}
}
场景:
public class Client {
public static void main(String[] args) {
// 创建门面对象
new Facade().execute();
}
}
三、门面模式的应用
门面模式的优点
- 减少系统的相互依赖
- 提高了灵活性
- 提高了安全性
门面模式的缺点
- 最大的不符合开闭原则
四、门面模式的使用场景
- 为一个复杂的模块或者子系统提供一个共外界访问的接口
- 子系统相对独立–外界对子系统的访问只需要黑箱操作即可
- 预防低水平人员带来的风险扩散–降低个人代码质量对整体项目的影响风险
五、门面模式额注意事项
- 一个子系统可以有多少门面
- 一般情况下一个就够了
多个门面的使用情况
- 子系统已经庞大到不能忍受的地步
- 子系统可以提供不同的访问路径
- 门面不参与子系统内的业务逻辑