23种设计模式 - 外观模式

模式定义

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


模式结构

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

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

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

相关推荐
找了一圈尾巴1 小时前
设计模式(创建型)-建造者模式
设计模式·建造者模式
HashFlag4 小时前
Go常用的设计模式
开发语言·设计模式·golang
payload5 小时前
创建型设计模式详解
设计模式
有龍则灵5 小时前
装饰器设计模式在Dubbo中的应用—源码级解析
设计模式·dubbo
C4程序员5 小时前
项目设计模式:责任链模式
设计模式·责任链模式
深情不及里子9 小时前
每天认识一个设计模式-桥接模式:在抽象与实现的平行宇宙架起彩虹桥
设计模式·桥接模式
Hanson Huang9 小时前
23种设计模式-模板方法(Template Method)设计模式
java·设计模式·模板方法模式·行为型设计模式
木子庆五10 小时前
Android设计模式之观察者模式
android·观察者模式·设计模式
此木|西贝10 小时前
【设计模式】策略模式
设计模式·策略模式
有龍则灵11 小时前
责任链设计模式在Dubbo中的应用深度解析
设计模式·dubbo