一、门面模式的概念和角色
(一)、门面模式的概念
门面模式又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。其主要特征是定义了一个高层接口,让子系统更容易使用,属于结构式模式。
门面模式的本质就是化零为整,引入一个中介类,把各个纷繁的功能组合成一个整体,只对外暴露一个统一的接口。
目的:为了用户使用方便,把过度拆分的分散功能,组合成要给整体,对外提供一个统一的接口。
(二)、门面模式的角色
1、外观角色(Facade):系统对外的统一接口。
2、子系统角色(SubSystem):可以同时有一个或多个SubSystem。每个SubSytem都不是一个单独的类,而是一个类的集合。SubSystem并不知道Facade,对于SubSystem而言,Facade只是另一个客户端而已(即Facade对SubSystem透明)。
二、门面模式的使用场景
1、简化复杂子系统
2、监控所有子系统,通过门面控制入口,统一监控
3、封装和隐藏子系统
4、两系统进行改造并打通关系
三、门面模式的通用写法
子系统角色A:SubSystemA
public class SubSystemA {
public void methodA() {
System.out.println("A");
}
}
子系统角色B:SubSystemB
public class SubSystemB {
public void methodB() {
System.out.println("B");
}
}
子系统角色C:SubSystemC
public class SubSystemC {
public void methodC() {
System.out.println("C");
}
}
外观角色:Facade
public class Facade {
private SubSystemA a = new SubSystemA();
private SubSystemB b = new SubSystemB();
private SubSystemC c = new SubSystemC();
public void methodA() {
this.a.methodA();
}
public void methodB() {
this.b.methodB();
}
public void methodC() {
this.c.methodC();
}
}
客户端:Main
public class Main {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodA();
facade.methodB();
facade.methodC();
}
}
四、门面模式的优缺点
(一)、优点:
1、简化了调用过程,无需深入了解子系统,以防给子系统带来风险
2、减少系统依赖,松散耦合
3、更好地划分访问层次,提高了安全性
4、遵循迪米特法则,即最少知道原则
(二)、缺点
1、当增加子系统和扩展子系统行为时,可能容易带来未知风险
2、不符合开闭原则
3、某些情况下可能违背单一职责