23种设计模式 - 外观模式

模式定义

外观模式(Facade Pattern)是一种结构型设计模式,通过为复杂子系统提供统一的简化接口,隐藏其内部复杂性,使客户端能够更便捷地调用子系统功能1469


模式结构

外观类(Facade)

  • 封装子系统的核心功能,提供高层接口(如start()shutdown())供客户端调用。
    子系统类(Subsystems)
  • 实现具体功能(如运动控制、传感器监控),但对外观类无感知。

适用场景

数控系统集成:统一管理运动控制、传感器、冷却等子系统。

简化复杂接口:如多媒体播放器整合音频、视频、字幕模块。

降低耦合:客户端仅依赖外观类,无需直接操作子系统。


C++示例(数控系统操作集成)

场景说明:

设计一个数控系统外观类,封装运动控制、传感器监控和冷却系统的启动/关闭流程。

cpp 复制代码
#include 

// 子系统1:运动控制
class MotionControl {
public:
    void moveTo(float x, float y) {
        std::cout << "运动控制:移动到坐标(" << x << ", " << y << ")\n";
    }
    void stop() { std::cout << "运动控制:停止\n"; }
};

// 子系统2:传感器系统
class SensorSystem {
public:
    void checkStatus() { std::cout << "传感器:状态正常\n"; }
    void shutdown() { std::cout << "传感器:关闭\n"; }
};

// 子系统3:冷却系统
class CoolingSystem {
public:
    void activate() { std::cout << "冷却系统:启动\n"; }
    void deactivate() { std::cout << "冷却系统:关闭\n"; }
};

// 外观类:数控系统统一接口
class CNCFacade {
private:
    MotionControl motionCtrl;
    SensorSystem sensorSys;
    CoolingSystem coolingSys;

public:
    void start() {
        coolingSys.activate();  // 先启动冷却系统
        sensorSys.checkStatus();// 检查传感器
        motionCtrl.moveTo(0, 0);// 初始化位置
        std::cout << "数控系统就绪\n";
    }

    void shutdown() {
        motionCtrl.stop();      // 停止运动
        sensorSys.shutdown();   // 关闭传感器
        coolingSys.deactivate();// 最后关闭冷却
        std::cout << "数控系统已关闭\n";
    }
};

// 客户端代码
int main() {
    CNCFacade cncFacade;
    cncFacade.start();     // 一键启动
    cncFacade.shutdown();  // 一键关闭
    return 0;
}

代码解释

子系统类:

  • MotionControl控制机械臂运动,SensorSystem监控设备状态,CoolingSystem防止过热。
    外观类CNCFacade
  • start()方法按顺序启动冷却、检查传感器、初始化位置,隐藏了子系统的调用细节。
  • shutdown()方法按安全顺序关闭各子系统,避免硬件损坏。
    客户端:
  • 只需调用外观类的两个方法,无需了解子系统交互逻辑。

模式优点

简化调用:客户端代码量减少70%(对比直接调用子系统)。

解耦:子系统升级不影响客户端(如修改冷却启动逻辑)。

安全封装:强制按顺序启停子系统,避免误操作。

相关推荐
workflower3 小时前
情境感知系统
人工智能·机器学习·设计模式·自然语言处理·机器人
咖啡八杯5 小时前
设计模式中的原则
设计模式·接口隔离原则·里氏替换原则·开闭原则·合成复用原则·单一职责原则
安冬的码畜日常7 小时前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
AI大法师19 小时前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
晚安code1 天前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
workflower1 天前
从幻觉,到现实
人工智能·深度学习·机器学习·设计模式·机器人
电子科技圈1 天前
第二代无线平台历久弥新,赋能物联网创新迭代
人工智能·嵌入式硬件·mcu·物联网·设计模式·硬件架构·iot
choumin2 天前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式
choumin2 天前
创建型模式——原型模式
c++·设计模式·原型模式·创建型模式
37.2℃9952 天前
Claude Design哪个公司技术好
python·设计模式