设计模式之外观模式

外观模式的定义

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

为子系统的接口集合提供一个统一接口,Facade定义高层接口使得子系统更容易使用。将系统分解为子系统有助于降低系统复杂性,系统的通用设计目标是最小化子系统间的通信和依赖。实现该设计目标的一种方式是引入外观对象,为子系统中的通用设施提供一个单一并且简单的接口。

拆分后的子系统可能非常多且复杂,外部客户端直接与子系统类交互会导致复杂的交互关系,导致维护性降低,同时提高了系统间的耦合。外观模式的结构

外观对象:Facade

  • 知道请求由哪个子系统类负责响应
  • 将客户单请求委派给合适的子系统对象

子系统类:subsystem classes

  • 实现子系统功能
  • 处理分配到外观对象的工作任务
  • 对外观对象无感知,不持有外观对象引用

基于外观模式,客户端请求首先到达外观类,并由外观类负责路由并委托到具体的子系统类处理逻辑。由此,**客户端通过外观类提供的一致接口对子系统进行间接访问,解耦了客户端与子系统。**外观模式的优点

  • 降低了系统相互依赖,客户端只对外观类进行依赖,与子系统实现类无关,降低了客户端和子系统间的耦合。
  • 屏蔽复杂性:外观类对子系统的复杂性进行了屏蔽,客户端无需感知子系统的存在。
  • 提高安全性:外观类对子系统类提供了安全访问点,只允许需要暴露的子系统类才能通过外观对象进行访问。

外观模式的缺点

  • 外观对象仅仅是客户端与子系统交互的可选方式,并不是唯一方式,客户端依然可以直接访问子系统。
  • 不符合开闭原则,在不引入抽象外观类的情况下,新增的需求可能需要修改外观类。因此,需要对外观类进行抽象以进行扩展。

外观模式的适用场景

  • 如果希望对复杂子系统提供一个简单接口
  • 如果在客户端和某个抽象的实现类间存在过多的依赖
  • 如果希望对子系统进行分层设计

与适配器模式区别本质上二者的模式意图不同:适配器是将接口转换为不同接口,外观模式是提供一个统一的接口来简化子系统的访问。

相关推荐
小白要加油努力2 小时前
C++设计模式--策略模式与观察者模式
开发语言·c++·设计模式
OEC小胖胖7 小时前
【React 设计模式】受控与非受控:解构 React 组件设计的核心模式
前端·react.js·设计模式·前端框架·web
pengzhuofan8 小时前
Java设计模式-外观模式
java·设计模式·外观模式
long31611 小时前
适配器模式 java demo
java·javascript·后端·程序人生·设计模式·适配器模式
##学无止境##11 小时前
从青铜到王者:Java设计模式——代理模式
java·设计模式·代理模式
pengzhuofan11 小时前
Java设计模式-适配器模式
java·设计模式·适配器模式
Meteors.11 小时前
23种设计模式——适配器模式(Adapter)详解
java·设计模式·适配器模式
牛奶咖啡1315 小时前
学习设计模式《二十三》——桥接模式
学习·设计模式·桥接模式·认识桥接模式·桥接模式的优点·何时选用桥接模式·桥接模式的使用示例
左灯右行的爱情16 小时前
深度学习设计模式:责任链(Chain of Responsibility)模式(例子+业务场景+八股)
深度学习·设计模式·责任链模式
是2的10次方啊16 小时前
🚀 Spring设计模式大揭秘:23种模式藏在你每天在用的框架里
设计模式