外观模式介绍

外观 外观 从名字都可以看出来对 颜值很看重呗。21世纪都是刷脸的时代,当然颜值很重要。那么对于我们写的代码 也一样,也需要好看的颜值,记得有本书叫 《代码整洁之道》 说的就是相关的内容。在我们的设计模式中呀,我们给用户呈现的应该是一个简单且统一的接口,我们不需要把接口实现的细节让用户知道,当然用户也不想知道你是怎么实现 。这也就是我们设计模式中的最少知道原则,又被称为 迪米特法则。那我们的外观模式呢就是围绕这个进行展开的

外观模式,为子系统中的一组接口提供一个一致的界面(对外提供),此模式定义了一个高层接口,这个接口使的这一子系统更加容易使用。下面看看外观模式的标准模型图。

外观模式模型图

外观模式案例

我们就用一个智能家居系统举例吧,智能家居系统 有KTV模式、观影模式,这是对外也就是给客户提供的。具体到KTV模式需要运行一些子系统,比如说 什么 灯光系统、音响系统、麦克风系统呀 这些 统统 没必要让用户知道和操作,我们的外观类具体进行负责 对客户对外就提供简洁的界面,内部自己实现那些子系统的调用。

智能家居代码

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;class LightSystem
{
public:void on(){cout << "开灯..." << endl;}void off(){cout << "关灯..." << endl;}
};
class MovieSystem
{
public:void on(){cout << "放电影..." << endl;}void off(){cout << "关闭电影..." << endl;}
};
class SounderSystem
{
public:void on(){cout << "打开音响..." << endl;}void off(){cout << "关闭音响..." << endl;}
};
class MusicSystem
{
public:void on(){cout << "放音乐..." << endl;}void off(){cout << "关闭音乐..." << endl;}
};
class MicrophoneSystem
{
public:void on(){cout << "麦克风打开..." << endl;}void off() {cout << "麦克风关闭..." << endl;}
};
//智能生活,给用户提供简洁的界面
class HomeSystem
{
public://KTV模式...void OpenKTV(){//关灯light.off();//打开音响sounder.on();//音乐走起music.on();//打开麦克风microphone.on();cout << "*********KTV模式 欢迎您********" << endl;}void CloseKTV(){light.on();sounder.off();music.off();microphone.off();cout << "**********KTV模式 已经关闭********" << endl;}//观影模式...void OpenMovie(){//关灯light.off();//打开音响sounder.on();//放电影sounder.on();cout << "*********家庭影院模式 欢迎您********" << endl;}void CloseMovie(){light.on();sounder.off();sounder.off();cout << "*********家庭影院模式 已经关闭********" << endl;}
private:LightSystem light;MovieSystem movie;MusicSystem music;SounderSystem sounder;MicrophoneSystem microphone;
};//客户端 只需要和系统统一的接口进行 交互,没有必要知道更多 -->迪米特法则(最少知道原则)
//给用用户提供 简洁的接口 是外观模式 最重要的一点
int main(int argc, char *argv[])
{HomeSystem home;home.OpenKTV();//开启KTV模式home.CloseKTV();home.OpenMovie();//开启电影模式home.CloseMovie();return EXIT_SUCCESS;
}

代码运行结果

设计模式:外观模式(C++)【颜值很重要】相关推荐

  1. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  2. 设计模式--------外观模式

    设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...

  3. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...

  4. Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

  5. 大话设计模式—外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  6. 设计模式 外观模式 一键电影模式

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...

  7. 8. 设计模式 外观模式 一键电影模式

    这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...

  8. 大话设计模式——外观模式

    股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...

  9. 设计模式 | 外观模式及典型应用

    前言 本文的主要内容: 介绍外观模式 示例 自己泡茶 到茶馆喝茶 外观模式总结 外观模式的典型应用 spring JDBC 中的外观模式 Mybatis中的外观模式 Tomcat 中的外观模式 SLF ...

  10. java 外观模式类图_Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

最新文章

  1. matlab 坐标轴中心,matlab中怎么将坐标轴改为经纬度坐标轴
  2. jQuery实现id模糊查询
  3. 用Chrome开发者工具调试一切
  4. EF 表联合查询 join
  5. 【渝粤题库】陕西师范大学151210 成本会计作业 (专升本)
  6. Excel里,vlookup函数各种应用-匹配多列、多条件匹配
  7. LeetCode算法入门- Implement strStr() -day22
  8. Web前端笔记-安装vue的4.5.9版本
  9. Unity+NGUI多分辨率适配方案
  10. 为什么机器学习工程师严重短缺?
  11. 交通监控系统服务器配置,监控系统服务器的配置
  12. BeautifulSoup库用法总结
  13. 使用AjaxPro实现ajax效果
  14. 材料表征技术书籍-7本
  15. c#生成Excel饼图、柱状图
  16. 如何统计网页的浏览量?Gate
  17. watch 深度监听及立即执行
  18. python webdriver脚本例子_python-webdriver 开始第一个脚本
  19. C语言求n的阶乘(n!)
  20. 《脱颖而出——成功网店经营之道》一1.3 两个人的战争:二东之争

热门文章

  1. 如何解决使用mac聚焦搜索无法搜索软件的情况
  2. java数据结构_概述Java中的数据结构是什么及其内部实现原理
  3. P3156 【深基15.例1】询问学号(20分)--python3实现
  4. 【chorme插件开发】第三节:开发html的展示类型插件实例
  5. python实验八分支语句_python语句(分支,循环)
  6. 基于javaEE技术的课程设计管理系统设计与实现
  7. 数据库MySQL的运行情况主要是检查什么_mysql 运行状态分析 运行故障排查实例
  8. linux中dpkg找不到命令_工作中常用的Linux命令介绍与实践
  9. JavaScript笔记-前端原生态WebSocket的使用
  10. Python笔记-BeautifulSoup通过查找Id获取元素信息