设计模式之门面(Facade)模式

前言

在组建构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至跟本无法实现。采用添加一层(间接)稳定接口,来隔离本来互相紧密关联的接口是一种常见的解决方案

定义

"接口隔离" 模式。为子系统中的一组接口提供一个一致(稳定)的界面,门面模式定义了一个高层接口。这个接口使得这一子系统更加容易使用(复用)

动机

上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战

如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖互相解耦?

案例

类图

总结

从客户程序的角度来看,门面模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种 "解耦" 的效果------内部子系统的任何变化不会影响到门面接口的变化

门面模式设计更注重从架构的层次去看整个系统,而不是单个类的层次。门面很多时候更是一种架构设计模式

门面设计模式并非一个集装箱,可以任意地放进任何多个对象。门面模式中组件的内部应该是 "相互耦合关系比较大的一系列组件",而不是一个简单的功能集合

相关推荐
achene_ql1 小时前
select、poll、epoll 与 Reactor 模式
linux·服务器·网络·c++
SY师弟3 小时前
51单片机——计分器
c语言·c++·单片机·嵌入式硬件·51单片机·嵌入式
豪斯有话说4 小时前
C++_哈希表
数据结构·c++·散列表
real_metrix5 小时前
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
c++·迭代器·迭代器失效·erase
朝朝又沐沐5 小时前
基于算法竞赛的c++编程(18)string类细节问题
开发语言·c++·算法
hstar95275 小时前
三十四、面向对象底层逻辑-SpringMVC九大组件之FlashMapManager接口设计哲学
java·spring·设计模式·架构
秋田君6 小时前
深入理解JavaScript设计模式之单例模式
javascript·单例模式·设计模式
a.3026 小时前
C++ 时间处理指南:深入剖析<ctime>库
数据结构·c++·算法
Dave_Young7 小时前
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
c++·设计模式
old_power7 小时前
在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 开发
c++·windows·vscode·cmake·ninja