关于网站建设的请示范文,wordpress 副标题怎么加分类,新闻头条国内大事,如何做好市场营销《C新经典设计模式》之第8章 外观模式 外观模式.cpp 外观模式.cpp
#include iostream
#include memory
using namespace std;// 中间层角色#xff0c;隔离接口#xff0c;两部分模块通过中间层打交道
// 提供简单接口#xff0c;不与底层直接打交道
// 提… 《C新经典设计模式》之第8章 外观模式 外观模式.cpp 外观模式.cpp
#include iostream
#include memory
using namespace std;// 中间层角色隔离接口两部分模块通过中间层打交道
// 提供简单接口不与底层直接打交道
// 提供统一接口访问子系统中的一群接口
// 定义高层接口让子系统更容易使用// 迪米特法则
// 一个对象对其他对象的了解应尽可能少降低对象间耦合提高系统的可维护性namespace ns1
{class graphic // 图形相关类{graphic(){};graphic(const graphic tmpobj);graphic operator(const graphic tmpobj);~graphic(){};public:static graphic getInstance(){static graphic instance;return instance;}public:void display(bool enable) // 是否全屏显示(true是){cout full screen- enable endl;}void effect(bool enable) // 是否开启特效(true是){cout special effects- enable endl;}void resolution(int index) // 设置窗口分辨率{cout resolution ratio- index endl;}void antialiasing(bool enable) // 是否开启抗锯齿(true是){cout anti-aliasing- enable endl;}};class sound // 声音相关类{sound(){};sound(const sound tmpobj);sound operator(const sound tmpobj);~sound(){};public:static sound getInstance(){static sound instance;return instance;}public:void bgsound(bool enable) // 是否开启背景声音(true是){cout background sound- enable endl;}void envirsound(bool enable) // 是否开启环境音效(true是){cout environmental sound effect- enable endl;}void expsound(bool enable) // 是否开启表情声音(true是){cout expressional voice- enable endl;}void setvolume(int level) // 音量大小设置(0-100){cout volume- level endl;}};class chatvoice // 语音聊天相关类{chatvoice(){};chatvoice(const chatvoice tmpobj);chatvoice operator(const chatvoice tmpobj);~chatvoice(){};public:static chatvoice getInstance(){static chatvoice instance;return instance;}public:void micvolume(int level) // 麦克风音量大小设置(0-100){cout microphone volume- level endl;}void micsens(int level) // 麦克灵敏度设置(0-100){cout microphone sensitivity- level endl;}void chatvolume(int level) // 聊天音量设置(0-100){cout chat volume- level endl;}};class conffacade // 扮演外观模式角色的类{conffacade(){};conffacade(const conffacade tmpobj);conffacade operator(const conffacade tmpobj);~conffacade(){};public:static conffacade getInstance(){static conffacade instance;return instance;}public:void LowConfComputer() // 对于低配置电脑只开启一些低配置选项{graphic g_gp graphic::getInstance();g_gp.display(true); // 全屏耗费资源更低g_gp.effect(false);g_gp.resolution(2);g_gp.antialiasing(false);sound g_snd sound::getInstance();g_snd.bgsound(false);g_snd.envirsound(false);g_snd.expsound(false);g_snd.setvolume(15);chatvoice g_cv chatvoice::getInstance();g_cv.micvolume(20);g_cv.micsens(50);g_cv.chatvolume(60);}void HighConfComputer() // 对于高配置电脑能达到最好效果的项全部开启{graphic g_gp graphic::getInstance();g_gp.display(false);g_gp.effect(true);g_gp.resolution(0);g_gp.antialiasing(true);sound g_snd sound::getInstance();g_snd.bgsound(true);g_snd.envirsound(true);g_snd.expsound(true);g_snd.setvolume(50);chatvoice g_cv chatvoice::getInstance();g_cv.micvolume(100);g_cv.micsens(100);g_cv.chatvolume(100);}};
}namespace ns2
{class Screen // 屏幕{public:void On() { cout screen on! endl; }void Off() { cout screen off! endl; }};class Light // 灯光{public:void On() { cout light open! endl; }void Off() { cout light close! endl; }};class Speaker // 音箱{public:void On() { cout speaker on! endl; }void Off() { cout speaker off! endl; }};class DvdPlayer // DVD播放器{public:void On() { cout dvd open! endl; }void Off() { cout dvd close! endl; }};class PlayerStation // 游戏机{public:void On() { cout playerstation on! endl; }void Off() { cout playerstation off! endl; }};class HomeTheaterFacade // 家庭影院外观模式类{Screen scnobj;Light lgobj;Speaker spkobj;DvdPlayer dpobj;PlayerStation psobj;public:void WatchMovie() // 看电影{// 屏幕打开灯光熄灭音箱打开DVD播放器打开游戏机关闭。scnobj.On();lgobj.Off();spkobj.On();dpobj.On();psobj.Off();}void PlayGame() // 玩游戏{// 屏幕打开灯光打开音箱打开DVD播放器关闭游戏机打开。scnobj.On();lgobj.On();spkobj.On();dpobj.Off();psobj.On();}};
}namespace ns3
{class Shape{public:virtual ~Shape() default;virtual void draw() const 0;};class Rectangle : public Shape{public:void draw() const override { cout Rectangle::draw() endl; }};class Square : public Shape{public:void draw() const override { cout Square::draw() endl; }};class Circle : public Shape{public:void draw() const override { cout Circle::draw() endl; }};class ShapeMaker{shared_ptrShape circle;shared_ptrShape rectangle;shared_ptrShape square;public:ShapeMaker(){circle make_sharedCircle();rectangle make_sharedRectangle();square make_sharedSquare();}void drawCircle() const { circle-draw(); }void drawRectangle() const { rectangle-draw(); }void drawSquare() const { square-draw(); }};
}int main()
{
#if 0using namespace ns1;graphic g_gp graphic::getInstance();g_gp.display(false);g_gp.effect(true);g_gp.resolution(2);g_gp.antialiasing(false);cout --------------- endl;sound g_snd sound::getInstance();g_snd.setvolume(80);g_snd.envirsound(true);g_snd.bgsound(false);cout --------------- endl;chatvoice g_cv chatvoice::getInstance();g_cv.chatvolume(70);g_cv.micsens(65);
#endif#if 0using namespace ns1;conffacade g_cffde conffacade::getInstance();cout Low-configuration computer endl;g_cffde.LowConfComputer();cout ------------------ endl;cout high-configuration computer endl;g_cffde.HighConfComputer();
#endif#if 0ns2::HomeTheaterFacade htfacobj;cout movie--------------- endl;htfacobj.WatchMovie();cout game--------------- endl;htfacobj.PlayGame();
#endif#if 1using namespace ns3;shared_ptrShapeMaker shapeMaker(new ShapeMaker());shapeMaker-drawCircle();shapeMaker-drawRectangle();shapeMaker-drawSquare();
#endifcout Over!\n;return 0;
}