设计模式(十七)—— 门面模式

门面模式

定义

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个更高层次的接口,使得子系统更易于使用。门面模式也叫做外观模式。

门面模式通用类图:

  • Facade:门面角色,暴露给客户端的方法,此角色知晓所有子系统的所有功能和责任,将客户端的请求下发到对应的子系统去,没有实际的业务逻辑,只是一个为委托类。
  • subsystem:子系统角色,可同时有一个或多个子系统,每个子系统都不是一个单独的类,而是一个类的集合,子系统并不知道门面的存在。

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ClassA {
public void doMethodA(){
System.out.println("do classA's method");
}
}
public class ClassB {
public void doMethodB(){
System.out.println("do classB's method");
}
}
public class ClassC {
public void doMethodC(){
System.out.println("do classC's method");
}
}

门面对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Facade {
private ClassA classA = new ClassA();
private ClassB classB = new ClassB();
private ClassC classC = new ClassC();

public void doMethodA(){
classA.doMethodA();
}
public void doMethodB(){
classB.doMethodB();
}
public void doMethodC(){
classC.doMethodC();
}
}
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
Facade facade = new Facade();
facade.doMethodA();
facade.doMethodB();
facade.doMethodC();
}
// 输出
//do classA's method
//do classB's method
//do classC's method

优点

  • 减少系统的互相依赖
  • 提高灵活性
  • 提高安全性

缺点

  1. 不能很好地限制客户使用子系统类。
  2. 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

使用场景

  • 为一个复杂的模块或子系统提供一个供外界访问的接口;

代码GitHub


欢迎关注公众号:
公众号微信

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
显示 Gitment 评论