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

前言

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

定义

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

动机

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

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

案例

类图

总结

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

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

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

相关推荐
千千寰宇11 小时前
[设计模式/Java/多线程] 设计模式之单例模式【9】
设计模式·操作系统-进程/线程/并发
此木|西贝17 小时前
【设计模式】原型模式
java·设计模式·原型模式
懒羊羊大王&18 小时前
模版进阶(沉淀中)
c++
owde18 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
GalaxyPokemon18 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi18 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
tadus_zeng19 小时前
Windows C++ 排查死锁
c++·windows
EverestVIP19 小时前
VS中动态库(外部库)导出与使用
开发语言·c++·windows
胡斌附体20 小时前
qt socket编程正确重启tcpServer的姿势
开发语言·c++·qt·socket编程
GalaxyPokemon20 小时前
Muduo网络库实现 [十] - EventLoopThreadPool模块
linux·服务器·网络·c++