设计模式之外观模式

2023-05-16

什么是外观模式

外观模式就是将一个复杂的子类系统抽象到同一个接口进行管理
外界只需要通过此接口与子类系统进行交互,不需要直接与复杂的子类系统进行交互

外观模式属于结构型模式

外观模式案例

1、实现KTV模式:打开电视,关灯,音响打开,麦克风打开,dvd打开
2、实现游戏模式:电视打开,音响打开,游戏机打开

// 电视机
class Television
{
public:
    void on(){
        cout << "打开电视" << endl;
    }
    void off(){
        cout << "关闭电视" << endl;
    }
};

// 灯
class Light
{
public:
    void on(){
        cout << "打开灯" << endl;
    }
    void off(){
        cout << "关闭灯" << endl;
    }
};

// 音响
class Audio
{
public:
    void on(){
        cout << "打开音响" << endl;
    }
    void off(){
        cout << "关闭音响" << endl;
    }
};

// 麦克风
class Mircophone
{
public:
    void on(){
        cout << "打开麦克风" << endl;
    }
    void off(){
        cout << "关闭麦克风" << endl;
    }
};

// DVD
class DVDplayer
{
public:
    void on(){
        cout << "打开DVD" << endl;
    }
    void off(){
        cout << "关闭DVD" << endl;
    }
};

// 游戏机
class Gamechine
{
public:
    void on(){
        cout << "打开游戏机" << endl;
    }
    void off(){
        cout << "关闭游戏机" << endl;
    }
};

// 外观一:KTV模式
class KTVMode
{
public:
    KTVMode(){
        pTv = new Television;
        pLight = new Light;
        pAudio = new Audio;
        pMi = new Mircophone;
        pDVD = new DVDplayer;
    }
    ~KTVMode(){
        delete pTv;
        delete pLight;
        delete pAudio;
        delete pMi;
        delete pDVD;
    }
    void OnKtv(){
        pTv->on();
        pLight->on();
        pAudio->on();
        pMi->on();
        pDVD->on();
    }
    void OffKtv(){
         pTv->off();
        pLight->off();
        pAudio->off();
        pMi->off();
        pDVD->off();
    }

public:
    Television * pTv;
    Light * pLight;
    Audio * pAudio;
    Mircophone* pMi;
    DVDplayer* pDVD;
};

// 外观二:游戏机模式
class GameMode
{
    public:
    GameMode(){
        pTv = new Television;
        pAudio = new Audio;
        pGame = new Gamechine;
    }
    ~GameMode(){
        delete pTv;
        delete pAudio;
        delete pGame;
    }
    void OnGame(){
        pTv->on();
        pAudio->on();
        pGame->on();
    }
    void OffGame(){
        pTv->off();
        pAudio->off();
        pGame->off();
    }

public:
    Television * pTv;
    Audio * pAudio;
    Gamechine* pGame;
};

// 外观模式的使用
void test01(){
    KTVMode* sp1 = new KTVMode();
    sp1->OnKtv(); // 打开KTV模式
    sp1->OffKtv(); // 关闭KTV模式
    cout << "------------------------------" << endl;
    GameMode* sp2 = new GameMode();
    sp2->OnGame();  // 打开游戏模式
    sp2->OffGame(); // 关闭游戏模式
    delete sp1;
    delete sp2;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式之外观模式 的相关文章

  • 固定翼武德充沛,多旋翼费拉不堪

    实际飞行测试 同样的动力组合 xff1a 2205电机 43 5030 3叶桨 同样的动力电池 xff1a 2200ma xff0c 3s xff0c 20c 基本一致的起飞全重 xff1a 固定翼680g xff0c 多轴700g 续航时
  • PH7系统简介

    PH7系统简介 PH7是什么 xff1f 狭义的PH7是一套以无人机飞控为典型应用案例 xff0c 涵盖无人车或船 GCS数据采集 伺服控制 AHRS 地面模拟仿真系统等的通用控制器代码框架 xff0c 该框架以Stm32CubeMx生成代
  • 小型无人机的布线与布局设计

    小型无人机的布线与布局设计 xff0c 似乎看上去像是在总体设计当中一个细枝末节 xff0c 是往往会被忽略掉的部分 但实际上 xff0c 布线与布局虽然不像飞控算法设计 飞行平台气动设计是总体设计当中最核心和最重要的部分 xff0c 但却
  • Bread Board Pilot 即将发布

    Bread Board Pilot xff08 简称BBP xff09 为基于 PH7 代码框架 xff08 PH7 系统简介 xff09 的一款飞控快速原型开发板 相比传统飞控板 xff0c BBP 的硬件设计具有以下突出特点 xff1a
  • Mavlink 协议硬解析主要代码

    int MAVLinkProtocol ParseMsg BYTE arMsgBuf MSGVALUE pMavMsg CString amp strMsgText Function Parameters arMsgBuf 为完整的 mav
  • 网络调试助手(NetAssist)不能正常创建TCP Serve连接问题

    一 问题由来 第一次使用网络调试助手 xff08 NetAssist xff09 建立服务端 xff08 TCP Server xff09 连接时碰到链接失败的问题 xff0c 如图所示 xff0c 其原因在于本地主机端口8080被其他进程
  • postman调用J-WSSE认证方式接口

    J WSSE认证方式的内容包括 xff1a 用户名 密码 nonce 时间戳 nonce是一个随机字符串 xff1b 时间戳 Created 为W3DTF格式 xff1b 密码创建方式为 xff1a PasswordDigest 61 Ba
  • ROS 三种通信编程入门:【话题通信】【服务通信】【动作通信】

    目录 一 创建工作空间二 ROS通信编程2 1 话题编程2 2 服务编程2 3 动作编程 五 总结六 参考资料 本文内容 xff1a 学习古月居 ROS 教学课件和相关视频 xff0c 练习课件上的话题通信 服务通信编程代码示例 一 创建工
  • .Net6.0系列-8 依赖注入(一)

    依赖注入 Dependency Injection DI 是控制反转 Inversion of Control IOC 思想的实现方式 依赖注入简化模块的组装过程 降低模块之间的耦合度 DI的几个概念 服务 Service 和框架请求之后返
  • Git学习记录

    Git学习记录 概念 xff1a 两个人同时参与开发 xff0c 那么就把这个项目放在一个公共的地方 xff0c 需要的时候都可以去获取 xff0c 有什么改动 xff0c 都可以进行提交 Git就是这样一个免费 开源的分布式版本控制系统
  • Maven学习记录

    Maven学习笔记 导读 xff1a Maven 是专门用于构建和管理Java相关项目的工具 Maven的主要用处 xff1a 项目结构一致统一维护jar包 xff0c 使jar包实现共享 流程 xff1a idea配置 打开File gt
  • 软件需求总结(总)

    软件需求工程复习归纳 课程目标 xff1a 系统地掌握需求开发和管理的技术和方法掌握需求分析和建模的技术和方法掌握需求规格的验证和评审等要点和方法结合具体的实际项目开发 xff0c 解决软件项目开发中的有关需求的各种问题能够适应目前各种应用
  • C++: extern关键字功能和用法研究

    今天遇到在aaa cpp文件中定义如下函数 xff1a 在bbb h文件中有以下声明 xff1a 但在aaa cpp中没有包含相关头文件 xff0c 那么为什么可以调用相关函数 xff0c 这就是extern的功能 1 extern的功能一
  • C语言之断言

    define assert param expr expr void 0 assert failed char FILE LINE Exported functions void assert failed char file int li
  • NMEA 0183协议解析

    NMEA 0183协议是目前GNSS接收机上使用最广泛的协议 xff0c 大多数常见的GNSS接收机 GNSS数据处理软件 导航软件都遵守或者至少兼容这个协议 XXGGA 时间 经纬度位置 解算状态 卫星颗数等相关信息 单GPS GPGGA
  • HTTP Digest认证客户端的实现

    HTTP Digest认证客户端的实现 http lwccb blog 163 com blog static 116970122006727338520 networks 2006 08 27 15 38 52 阅读34 评论0 字号 x
  • 解决vscode C++代码查找所有引用“Find all reference“慢的问题

    概述 使用vscode编写C 43 43 代码右键 34 Find all reference 34 时 xff0c 发现响应特别慢 xff0c 而且很不准确 一个解决方法是使用global组件待的gtags 步骤 在VSCode中安装gt

随机推荐