论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
分布式数据库
›
C++设计模式之外观模式
C++设计模式之外观模式
慢吞云雾缓吐愁
金牌会员
|
2024-12-6 01:23:40
|
显示全部楼层
|
阅读模式
楼主
主题
907
|
帖子
907
|
积分
2721
动机
下图中左边方案的标题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临许多变化的挑战。
如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?
将一个系统划分成为多少个子系统有利于低沉系统的复杂性。一个常见的设计目的是使子系统间的通信和相互依赖关系达到最小。达到该目的的途径之一是就是引入一个 外观(facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。
例如有一个编程情况,它允许应用程序访问它的编译子系统。这个编译子系统包罗了多少个类,如 Scanner、Parser、ProgramNode、BytecodeStream 和 ProgramNodeBuilder,用于实现这一编译器。有些特别应用程序需要直接访问这些类,但是大多数编译器的用户并不关心语法分析和代码生成如许的细节;他们只是盼望编译一些代码。对这些用户,编译子系统中那些功能强大但层次较低的接口只会使他们的任务复杂化。
为了提供一个高层的接口而且对客户屏蔽这些类,编译子系统还包括一个 Compiler 类。这个类定义了一个编译器功能的统一接口。 Compiler 类是一个外观,它给用户提供了一个单一而简单的编译子系统接口。它无需完全隐藏实现编译功能的那些类,即可将它们联合在一起。编译器的外观可方便大多数程序员使用,同时对少数懂得如何使用底层功能的人,它并不隐藏这些功能,如下图所示。
Facade模式定义
为子系统中的一组接口提供一个同等的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Facade结构
到场者
• Facade (Compiler)
— 知道哪些子系统类负责处理哀求。
— 将客户的哀求代理给得当的子系统对象。
• Subsystem classes (Scanner、Parser、ProgramNode 等)
— 实现子系统的功能。
— 处来由 Facade 对象指派的任务。
— 没有 facade 的任何相关信息;即没有指向 facade 的指针。
协作
• 客户程序通过发送哀求给 Facade 的方式与子系统通讯, Facade 将这些消息转发给得当的子系统对象。尽管是子系统中的有关对象在做实际工作,但 Facade 模式自己也必须将它的接口转换成子系统的接口。
• 使用 Facade 的客户程序不需要直接访问子系统对象。
要点总结
从客户程序的角度来看,Façade模式简化了整个组件系统的接口, 对于组件内部与外部客户程序来说,达到了一种“解耦”的效 果——内部子系统的任何变化不会影响到Façade接口的变化。
Façade设计模式更注意从架构的层次去看整个系统,而不是单个类的层次。Façade许多时候更是一种架构设计模式。
Façade设计模式并非一个集装箱,可以恣意地放进任何多个对象。Facade模式中组件的内部应该是“相互耦合关系比较大的一系列 组件”,而不是一个简单的功能集合。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
慢吞云雾缓吐愁
金牌会员
这个人很懒什么都没写!
楼主热帖
聊聊 C# 方法重载的底层玩法 ...
使用 Mypy 检查 30 万行 Python 代码, ...
Linux安装PHP8 新版笔记
【只与自己有关】人往高处走?何为高? ...
WPF 视频硬解码渲染播放(无空域问题) ...
Blazor WebAssembly + Grpc Web = 未来 ...
微信公众平台测试号申请、使用HBuilder ...
快速成长的秘诀|如何实现自我认知升级 ...
Java多线程(7):JUC(上)
Mybatis基础知识大全!!!
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表