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%(对比直接调用子系统)。

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

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

相关推荐
geovindu6 小时前
java:Abstract Factory Pattern
java·开发语言·后端·设计模式·抽象工厂模式·创建型模式
geovindu6 小时前
java: Factory Method Pattern
java·开发语言·后端·设计模式·工厂方法模式·创建型模式
折哥的程序人生 · 物流技术专研8 小时前
第2篇:模板方法模式核心:好莱坞原则
设计模式·uml·模板方法模式·行为型模式·钩子方法·扩充系列·好莱坞原则
折哥的程序人生 · 物流技术专研8 小时前
第2篇:策略模式三大角色拆解与UML
java·设计模式·策略模式·uml·编程入门·行为型模式·扩充系列
Robot_Nav9 小时前
C++ 面试常问问题汇总:基础语法、面向对象、STL、多线程与设计模式
c++·设计模式·面试
XX風11 小时前
设计模式的本质
设计模式
折哥的程序人生 · 物流技术专研20 小时前
第8篇:六大设计原则在工厂模式中的体现
java·设计模式·设计原则·工厂模式·编程进阶·扩充系列
咖啡八杯1 天前
GoF设计模式——模板方法模式
java·后端·spring·设计模式
饼干哥哥1 天前
Openclaw已死?任何Agent都能用Cli实现AI自主运营跨境电商
设计模式·openai·ai编程