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

前言

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

定义

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

动机

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

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

案例

类图

总结

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

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

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

相关推荐
玫瑰花店2 分钟前
SomeIP报文详解
c++·someip
LengineerC8 分钟前
Rust仿node事件总线的简单实现
设计模式·rust
利刃大大15 分钟前
【c++中间件】redis介绍 && redis-plus-plus库使用
c++·redis·中间件
永不停转20 分钟前
关于 QGraphicsItemGroup 内部项目发生变化后group重新定位的问题
c++·qt
IT永勇1 小时前
C++设计模式-装饰器模式
c++·设计模式·装饰器模式
Murphy_lx1 小时前
std_ofstream
c++
草莓熊Lotso1 小时前
红黑树从入门到进阶:4 条规则如何筑牢 O (logN) 效率根基?
服务器·开发语言·c++·人工智能·经验分享·笔记·后端
啊董dong2 小时前
课后作业-2025年11月23号作业
数据结构·c++·算法·深度优先·noi
带鱼吃猫2 小时前
Linux系统:策略模式实现自定义日志功能
linux·c++
zzzsde2 小时前
【C++】C++11(1):右值引用和移动语义
开发语言·c++·算法