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

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

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

相关推荐
七月丶4 小时前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞5 小时前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式
九狼5 小时前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式
静水流深_沧海一粟1 天前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder1 天前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室1 天前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦2 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo5 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4965 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃5 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式