1、 概述
外观模式是一种使用频率非常高的结构型设计模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
2、 模式中的角色
- 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。
- 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。
3、结构图
4、代码实现
//子系统中的类
class SubSystemA{
public void MethodA() {
//业务实现代码
}
}
class SubSystemB{
public void MethodB() {
//业务实现代码
}
}
class SubSystemC{
public void MethodC() {
//业务实现代码
}
}
//外观类
class Facade{
private SubSystemA obj1 = new SubSystemA();
private SubSystemB obj2 = new SubSystemB();
private SubSystemC obj3 = new SubSystemC();
public void MethodA(){
obj1.MethodA();
obj2.MethodB();
}
public void MethodB(){
obj1.MethodA();
obj3.MethodC();
}
}
具体调用:
//由于Facade的作用,客户端可以根本不知道子系统类的存在
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
5、使用场景
- 需要将设计进行分层时考虑Facade模式。
- 在开发阶段,子系统往往因为重构变得越来越复杂,增加外观模式可以提供一个简单的接口,减少它们之间的依赖。
- 在维护一个遗留的大型系统时,可以这个系统已经非常难以维护和扩展,可以为新系统开发一个Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接
参考文章外观模式和设计模式学习笔记-外观模式。