外观模式/门面模式(Facade Pattern)

一、概念

门面模式(Facade Pattern),又被称之为外观模式。该模式提供一个统一的接口,用来访问相同子系统或者不同子系统之中的一群接口。使得子系统更加容易调用。

  • 可以理解为:将多个接口功能组合到一个接口中,使得客户只要调用一个接口,而不用调用多个接口就能达到目的,避免外部直接访问具体的业务方法
  • 解决多个复杂接口带来的使用困难,起到简化用户操作的作用

简单地说,门面对象是外界访问子系统内部的唯一通道,外部模块不用管子系统内部是多么复杂以及如何实现的。

二、适用场景

  1. 当各个子系统越来越复杂时,可以提供门面接口来统一调用
  2. 当系统需要进行分层设计时,可以考虑使用门面模式,利用门面对象来作为每层的入口,这样可以简化分层间的接口调用

三、参与者

  • Facade(门面角色/外观角色):为调用端提供统一的调用接口Facade知道哪些子系统负责处理请求,从而将调用端的请求代理给适当子系统对象
    • 一般情况下,Facade不参与子系统的任何业务逻辑,仅持有了子系统具体实现的引用。
  • SubSystem(子系统角色)指模块或者子系统,可以有一个或多个SubSystem,负责处理Facade指派的任务,他是功能的实际提供者,SubSystem并不知道门面角色的存在,对于SubSystem来说,Facade也仅仅只是一个调用者(客户端)而已。
  • Client(调用者): 外观接口的调用者

四、代码例子

烤羊肉串制作过程,首先对切好的羊肉进行腌制,洗干净穿羊肉的钎子,之后把羊肉穿到钎子上放在一起,最后经过烧烤完成美味的烤肉;

外观模式就是准备好切好的羊肉,把羊肉交给专业烤肉师傅,他会烤好后返回给你烤好的羊肉串。(如果你想自己体验烤肉过程的话,可以经过之前说到的步骤完整的完成烤肉过程,或从中间某一步比如说串好的烤肉继续后续步骤)

Facade(门面角色/外观角色):ShishKebab

SubSystem(子系统角色):ChoppedLamb、 PickledLamb、 BarbecueBraze、 LambWithBarbecueBrazeObj、 FinishedShishKebab

五、UML图

六、优缺点

(一)优点

  1. 简化了调用过程,调用者无需深入了解子系统,以防给子系统带来风险
  2. 可以帮我们更好的划分访问的层级,当系统需要进行分层设计时,可以考虑使用Facade模式
  3. 遵循了迪米特法则(即最少知道原则)

(二)缺点

  1. 当增加子系统或者扩展子系统功能时,可能容易带来未知风险
  2. 不符合开闭原则
  3. 某些情况下可能会违背单一职责原则
posted @ 2022-12-08 09:53  ImreW  阅读(102)  评论(0编辑  收藏  举报