外观模式/门面模式(Facade Pattern)
一、概念
门面模式(Facade Pattern),又被称之为外观模式。该模式提供一个统一的接口,用来访问相同子系统或者不同子系统之中的一群接口。使得子系统更加容易调用。
- 可以理解为:
将多个接口功能组合到一个接口中,使得客户只要调用一个接口,而不用调用多个接口就能达到目的
,避免外部直接访问具体的业务方法 - 解决多个复杂接口带来的使用困难,起到简化用户操作的作用
简单地说,门面对象是外界访问子系统内部的唯一通道,外部模块不用管子系统内部是多么复杂以及如何实现的。
二、适用场景
- 当各个子系统越来越复杂时,可以提供门面接口来统一调用
- 当系统需要进行
分层设计
时,可以考虑使用门面模式,利用门面对象来作为每层的入口
,这样可以简化分层间的接口调用
三、参与者
- Facade(门面角色/外观角色):为调用端提供
统一的调用接口
,Facade知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象
。- 一般情况下,Facade不参与子系统的任何业务逻辑,仅持有了子系统具体实现的引用。
- SubSystem(子系统角色):
指模块或者子系统
,可以有一个或多个SubSystem,负责处理Facade指派的任务,他是功能的实际提供者,SubSystem并不知道门面角色的存在,对于SubSystem来说,Facade也仅仅只是一个调用者(客户端)
而已。 - Client(调用者): 外观接口的调用者
四、代码例子
烤羊肉串制作过程,首先对切好的羊肉进行腌制,洗干净穿羊肉的钎子,之后把羊肉穿到钎子上放在一起,最后经过烧烤完成美味的烤肉;
外观模式就是准备好切好的羊肉,把羊肉交给专业烤肉师傅,他会烤好后返回给你烤好的羊肉串。(如果你想自己体验烤肉过程的话,可以经过之前说到的步骤完整的完成烤肉过程,或从中间某一步比如说串好的烤肉继续后续步骤)
Facade(门面角色/外观角色):ShishKebab
SubSystem(子系统角色):ChoppedLamb、 PickledLamb、 BarbecueBraze、 LambWithBarbecueBrazeObj、 FinishedShishKebab
五、UML图
六、优缺点
(一)优点
- 简化了调用过程,调用者无需深入了解子系统,以防给子系统带来风险
可以帮我们更好的划分访问的层级
,当系统需要进行分层设计时,可以考虑使用Facade模式- 遵循了迪米特法则(即最少知道原则)
(二)缺点
- 当增加子系统或者扩展子系统功能时,可能容易带来未知风险
- 不符合开闭原则
- 某些情况下可能会违背单一职责原则
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了