1. 概念
外观模式(Facade)又叫做门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。
2. 代码示例
门面模式其实相对于其他设计模式来说比较简单,其实说白了就是因为其他类都要遵循单一职责原则(也就是一个类只能干一个事情),但是在开发过程中有一个需求就是需要将其他单一职责的类都要组合起来作为一个新的工作流程对外暴露,那么我们就可以使用门面模式,通过另一个类按照一定的执行顺序进行组合来完成想要的工作流。
这里我就以一个微信自助程序为例,主要就是用户可以通过微信自助程序的一个方法,就可以完成在Police、Edu、Social类完成注册,即简化了每一个类都需要进行单独注册的麻烦。
Edu.java
public class Edu {
public void assignSchool(String name){
System.out.println(name+",你的孩子明天去附属幼儿园 报道......");
}
}
Police.java
public class Police {
public void resgister(String name){
System.out.println(name + "已办理落户");
}
}
Social.java
public class Social {
public void handleSocial(String name){
System.out.println(name+",你的社保关系已经转移....");
}
}
WeiXinFacade.java (门面模式主要展现类)
public class WeiXinFacade {
Police police = new Police();
Edu edu = new Edu();
Social social = new Social();
/**
* 封装起来只留一个方法
* @param name
*/
public void handleXxx(String name){
police.resgister(name);
edu.assignSchool(name);
social.handleSocial(name);
}
}
MainTest.java
public class MainTest {
public static void main(String[] args) {
// 非门面模式的写法
// Police police = new Police();
// police.resgister("张三");
//
// Edu edu = new Edu();
// edu.assignSchool("张三");
//
// Social social = new Social();
// social.handleSocial("张三");
// 门面模式的写法
WeiXinFacade facade = new WeiXinFacade();
facade.handleXxx("张三");
}
}
这里我们能看到,使用门面模式大大简化了外部系统在调用的过程,只需要调用门面模式提供类所提供的统一方法,直接就可以完成整体的流程,在保证其他类的单一职责原则时同时也实现了新的业务逻辑的需求。
3. 应用场景
- JAVA 的三层开发模式。
- 分布式系统的网关 Tomcat源码中的RequestFacad
- ......