外观
2023-02-18 15:32:16 时间
为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式,即Facade,是一个比较简单的模式。它的基本思想如下:
如果客户端要跟许多子系统打交道,那么客户端需要了解各个子系统的接口,比较麻烦。如果有一个统一的“中介”,让客户端只跟中介打交道,中介再去跟各个子系统打交道,对客户端来说就比较简单。所以Facade就相当于搞了一个中介。
我们以注册公司为例,假设注册公司需要三步:
- 向工商局申请公司营业执照;
- 在银行开设账户;
- 在税务局开设纳税号。
以下是三个系统的接口:
// 工商注册:
public class AdminOfIndustry {
public Company register(String name) {
...
}
}
// 银行开户:
public class Bank {
public String openAccount(String companyId) {
...
}
}
// 纳税登记:
public class Taxation {
public String applyTaxCode(String companyId) {
...
}
}
如果子系统比较复杂,并且客户对流程也不熟悉,那就把这些流程全部委托给中介:
public class Facade {
public Company openCompany(String name) {
Company c = this.admin.register(name);
String bankAccount = this.bank.openAccount(c.getId());
c.setBankAccount(bankAccount);
String taxCode = this.taxation.applyTaxCode(c.getId());
c.setTaxCode(taxCode);
return c;
}
}
这样,客户端只跟Facade打交道,一次完成公司注册的所有繁琐流程:
Company c = facade.openCompany("Facade Software Ltd.");
很多Web程序,内部有多个子系统提供服务,经常使用一个统一的Facade入口,例如一个RestApiController
,使得外部用户调用的时候,只关心Facade提供的接口,不用管内部到底是哪个子系统处理的。
更复杂的Web程序,会有多个Web服务,这个时候,经常会使用一个统一的网关入口来自动转发到不同的Web服务,这种提供统一入口的网关就是Gateway,它本质上也是一个Facade,但可以附加一些用户认证、限流限速的额外服务。
练习
使用Facade模式实现一个注册公司的“中介”服务。
小结
Facade模式是为了给客户端提供一个统一入口,并对外屏蔽内部子系统的调用细节。
相关文章
- Ansible PlayBook语法
- Ansible 通过Playbook部署LAMP
- InnoDB的锁(Locking)
- Ansible 通过PlayBook部署Zabbix
- 一次死锁(Dead Lock)分析
- 【matplotlib】3-绘制统计图形
- 融资
- 共享文件夹
- Docker Registry
- 编译LAMP部署动态网站环境
- 如何在本地Fabric release-2.2上快速make all成功
- 编译LNMP部署动态网站环境
- Odoo 基于Win10搭建基于Win10搭建odoo14开发环境搭建
- certutil 命令配合PS反弹后门
- nacos v2.2 k8s部署启动报错:nacos server did not start because dumpservice bean construction failure. errMs
- 使用 openPDF 创建带目录的文档时候, 使用如下方式, 可以保证目录页码准确
- Web前端开发HTML笔记
- Web前端开发CSS笔记
- 花个几分钟,带你再了解一下Java注解
- 数字化供应链|B2B供应链协同可视化如何应用全程业务化管理