当前位置: 首页 > news >正文

外观模式(Facade Pattern)

外观模式(Facade Pattern)是 GoF(四人帮)23 种设计模式之一,属于结构型设计模式

它的核心思想只有一句话:

把复杂系统封装起来,对外提供一个统一、简单的接口,让使用者不需要了解内部复杂的实现。

一、为什么需要外观模式?

假设没有Robot类,用户想控制机器人。

他必须自己创建很多对象

EventCenter events; Connection connection(events, options.connection); Navigator navigator(std::make_shared<Connection>(connection)); Motion motion(std::make_shared<Connection>(connection)); Battery battery(std::make_shared<Connection>(connection)); Voice voice(std::make_shared<Connection>(connection)); Device device(std::make_shared<Connection>(connection));

然后:

connection.connect(); motion.move(...); navigator.navigateTo(...); battery.getState(); voice.speak(...);

你会发现:

用户必须知道:

Connection 怎么创建

EventCenter 怎么创建

Motion 怎么依赖 Connection

Navigator 怎么依赖 Connection

Battery 怎么依赖 Connection

SDK 的所有内部细节都暴露给用户了。

对于 SDK 使用者来说,非常复杂。

于是,我们增加一个:

Robot

用户变成:

auto robot = Robot::createConnected(options); robot->motion().move(...); robot->navigator().navigateTo(...); robot->battery().getState(); robot->voice().speak(...);

是不是一下子简单了?

这就是外观模式

二、Robot 为什么是外观模式?

看看 Robot 里面都有什么:

class Robot { private: Connection connection_; Motion motion_; Navigator navigator_; Battery battery_; Voice voice_; Device device_; EventCenter events_; };

Robot 内部拥有:

Connection Motion Navigator Battery Voice Device EventCenter

但是:

用户根本不知道这些对象怎么创建。

用户只看到:

robot->motion() robot->navigator() robot->battery() robot->voice() robot->device()

Robot 把所有复杂对象全部藏起来了。

这就是:

对外提供统一入口。

三、外观模式的优缺点

优点

① 使用简单

用户只需要:

Robot robot;

不需要:

了解:

几十个类。

② 降低耦合

用户:

不知道:

Connection。

以后:

Connection:

换成:

WebSocket。

用户:

代码:

不用:

修改。

③ 隐藏实现

以后:

SDK:

增加:

Camera

Lidar

Map

Task

Robot:

里面:

增加:

成员。

用户:

代码:

不用:

变。

缺点

如果:

Robot:

越来越大。

可能:

变成:

Robot

管理100多个模块

就会:

越来越臃肿。

所以:

Robot:

一般:

只负责:

协调。

真正:

业务:

放:

Motion、

Battery、

Navigator。

http://www.jsqmd.com/news/1216257/

相关文章:

  • # 2026年银川刑事辩护律师哪家好?5位实战经验丰富值得推荐 - 本地品牌推荐
  • 北京企业财税行业GEO服务商代理加盟选型靠谱本地推荐:财税赛道合伙人怎么找到真正能交付的源头厂商? - 企业新闻快传
  • 7月更新 ChatGPT、Codex、Pro、Plus 背后的工程难题:AI Consistency 将成为 LLM-Native 系统的下一道门槛(5.6)
  • 游戏服务器性能调优:基于 ECS 架构的确定性帧同步与 Go 协程并发模型实践
  • 2026年7月最新亨得利官方钟表服务中心|全新网点地址与官方售后热线权威信息通告 - 亨得利官方
  • PYTHON+AI LLM DAY ONE HUNDRED AND NINE
  • 2026年行业揭秘:三大正规解码矩阵厂商的口碑真相与终极选择
  • 如何高效管理云文件:蓝奏云客户端深度使用指南
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC
  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 2026年7月最新太原百达翡丽官方售后客服电话及服务网点地址查询 - 百达翡丽官方售后中心
  • 2026 年新发布:康保口碑好的悬空电动伸缩雨棚制造企业有哪些,夏天防晒?别再用老式遮阳了! - 企业官方推荐【认证】
  • 对话系统的多轮评测框架:从单轮质量到上下文连贯性的递进评估
  • 2026 年 7 月新发布:河源口碑好的鸬鹚养殖哪家强批发厂家哪个好,揭秘:顶级鸬鹚养殖的秘密武器曝光 - 企业官方推荐【认证】
  • 2026北京大牌包包回收哪家靠谱?专业观察:从爱马仕、香奈儿到LV、迪奥,哪些渠道更值得参考?(附毓典全国连锁及本地榜单) - 奢品流通笔谈
  • 周期卫星:第一次来月经后几个月都不规律,正常吗?为什么我的月经周期和别人不一样?
  • Agent 安全审计:Prompt 注入防护与工具调用权限校验
  • 今日橙色圆底标记:Circle + Shadow + 条件渲染
  • 终极Xbox 360模拟器教程:在PC上重温经典游戏
  • 运动商城网站如何改变你的购物体验
  • Node.js 事件循环与异步性能:理解 Event Loop 避免阻塞
  • 【JVM调优实战】17-Arthas线上诊断神器
  • 个人 AI 助手怎么选:本机模型、多 Workspace 与国产开源智能体的桌面路径
  • EasyMarkets:监管意识与用户体验的双重评估
  • 2026 年新消息:普安靠谱的矿山抑尘剂定制厂家哪家专业,揭秘:矿山效率提升的“隐形武器” - 企业官方推荐【认证】
  • 瑞德克斯的账户提醒会更安心吗?
  • 北京日用消费品牌GEO城市合伙人选型推荐哪家靠谱:源头厂商、收益模式与合伙人权益一次看懂 - 企业新闻快传
  • 2026北京奢侈品回收哪家靠谱?专业观察:从名表、黄金到钻石、名包,哪些渠道更值得参考?(附毓典全国连锁及本地榜单) - 奢品流通笔谈
  • STM32H5_IAP升级项目复盘——从缺陷到改进