您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-13 00:09 204 查看

外观模式介绍

外观 外观 从名字都可以看出来对 颜值很看重呗。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;
}


代码运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: