公司动态

外观模式(Facade Pattern)

📅 2026/7/18 23:52:58
外观模式(Facade Pattern)
外观模式Facade Pattern是 GoF四人帮23 种设计模式之一属于结构型设计模式。它的核心思想只有一句话把复杂系统封装起来对外提供一个统一、简单的接口让使用者不需要了解内部复杂的实现。一、为什么需要外观模式假设没有Robot类用户想控制机器人。他必须自己创建很多对象EventCenter events; Connection connection(events, options.connection); Navigator navigator(std::make_sharedConnection(connection)); Motion motion(std::make_sharedConnection(connection)); Battery battery(std::make_sharedConnection(connection)); Voice voice(std::make_sharedConnection(connection)); Device device(std::make_sharedConnection(connection));然后connection.connect(); motion.move(...); navigator.navigateTo(...); battery.getState(); voice.speak(...);你会发现用户必须知道Connection 怎么创建EventCenter 怎么创建Motion 怎么依赖 ConnectionNavigator 怎么依赖 ConnectionBattery 怎么依赖 ConnectionSDK 的所有内部细节都暴露给用户了。对于 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增加CameraLidarMapTaskRobot里面增加成员。用户代码不用变。缺点如果Robot越来越大。可能变成Robot↓管理100多个模块就会越来越臃肿。所以Robot一般只负责协调。真正业务放Motion、Battery、Navigator。