一:门面模式的使用场景
- 为一个复杂的模块或子系统提供一个供外界访问的接口。
- 子系统相对独立----外界对子系统的访问只要黑箱操作即可。
- 预防低水平人员带来的风险扩散。
本质就是提供一个给外部调用的API门面,让用户不用关注里面的实现逻辑,只需要调用对应的接口即可实现对应的功能。
门面模式在开源框架中用的很多,如mybatis中的会话层接口就是用的门面模式,kafka中调用接口层也是用的门面模式。
二:代码实现
ClassA实体类:
package facade;
/**
* @author lizhangyu
* @date 2021/5/2 14:47
*/
public class ClassA {
public ClassA() {
}
public void doSomeThingA() {
//业务逻辑
System.out.println("A");
}
}
ClassB实体类:
package facade;
/**
* @author lizhangyu
* @date 2021/5/2 14:47
*/
public class ClassB {
public ClassB() {
}
public void doSomeThingB() {
//业务逻辑
System.out.println("B");
}
}
ClassC实体类:
package facade;
/**
* @author lizhangyu
* @date 2021/5/2 14:47
*/
public class ClassC {
public ClassC() {
}
public void doSomeThingC() {
//业务逻辑
System.out.println("C");
}
}
Facade实体类:
package facade;
/**
* @author lizhangyu
* @date 2021/5/2 14:50
*/
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.doSomeThingB();
}
public void methodC() {
this.c.doSomeThingC();
}
}
Client实体类:
package facade;
/**
* @author lizhangyu
* @date 2021/5/2 14:55
*/
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodA();
facade.methodB();
facade.methodC();
}
}
运行结果:
A
B
C
Process finished with exit code 0
三:门面模式的优点和缺点
1:优点
- 减少了系统的相互依赖
- 提高了灵活性
- 提高安全性
2:缺点
对扩展开发,对修改关闭,如果系统投产后有一个小bug,外部系统调用发现之后无法解决,只能等对应系统的开发修改对应的代码,这个风险很大,所以在设计的时候要仔细思考。