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

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

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

相关推荐
国强_dev1 天前
量体裁衣在技术方案中的应用
设计模式·系统架构
Engineer邓祥浩1 天前
设计模式学习(16) 23-14 命令模式
学习·设计模式·命令模式
Maddie_Mo1 天前
智能体设计模式 第二章:路由模式
设计模式
一条闲鱼_mytube2 天前
智能体设计模式(五)人机协同-知识检索RAG-智能体间通信
网络·人工智能·设计模式
小码过河.2 天前
设计模式——建造者模式
单片机·设计模式·建造者模式
小码过河.2 天前
设计模式——工厂方法模式
设计模式·工厂方法模式
把csdn当日记本的菜鸡2 天前
Java设计模式简单入门
java·开发语言·设计模式
老蒋每日coding2 天前
AI Agent 设计模式系列(十一)—— 目标设定和监控模式
人工智能·设计模式·langchain
蔺太微2 天前
外观模式(Facade Pattern)
设计模式·外观模式
进击的小头2 天前
C语言实现设计模式的核心基石
c语言·开发语言·设计模式