当前位置: 首页 > wzjs >正文

四川建设网网站成都网站建设公司

四川建设网网站,成都网站建设公司,外国人做那个视频网站吗,济宁有做企业网站吗第8章 外观模式 8.1 配置相关范例 核心问题 游戏配置项复杂,直接调用业务类导致耦合度高: 图形配置类 // 图形相关类 class Graphic { private:// 单件模式实现Graphic() default;Graphic(const Graphic&) delete;Graphic& operator(cons…

第8章 外观模式

8.1 配置相关范例

核心问题

游戏配置项复杂,直接调用业务类导致耦合度高:

  1. 图形配置类
// 图形相关类
class Graphic {
private:// 单件模式实现Graphic() = default;Graphic(const Graphic&) = delete;Graphic& operator=(const Graphic&) = delete;~Graphic() = default;public:static Graphic& getInstance() {static Graphic instance;return instance;}// 图形配置接口void display(bool enable) {std::cout << "图形->是否全屏显示: " << (enable ? "是" : "否") << std::endl;}void effect(bool enable) {std::cout << "图形->是否开启特效: " << (enable ? "是" : "否") << std::endl;}void resolution(int index) {std::cout << "图形->分辨率设置: " << (index==0?"1920x1080":index==1?"1280x720":"1024x600") << std::endl;}void antialiasing(bool enable) {std::cout << "图形->是否开启抗锯齿: " << (enable ? "是" : "否") << std::endl;}
};
  1. 声音配置类(单件模式)
// 声音相关类
class Sound {
private:// 单件模式实现Sound() = default;Sound(const Sound&) = delete;Sound& operator=(const Sound&) = delete;~Sound() = default;public:static Sound& getInstance() {static Sound instance;return instance;}// 声音配置接口void bgsound(bool enable) {std::cout << "声音->背景声音: " << (enable ? "开启" : "关闭") << std::endl;}void envirsound(bool enable) {std::cout << "声音->环境音效: " << (enable ? "开启" : "关闭") << std::endl;}void expsound(bool enable) {std::cout << "声音->表情声音: " << (enable ? "开启" : "关闭") << std::endl;}void setvolume(int level) {std::cout << "声音->音量设置: " << level << "%" << std::endl;}
};
  1. 语音聊天类(单件模式)
// 语音聊天相关类
class ChatVoice {
private:// 单件模式实现ChatVoice() = default;ChatVoice(const ChatVoice&) = delete;ChatVoice& operator=(const ChatVoice&) = delete;~ChatVoice() = default;public:static ChatVoice& getInstance() {static ChatVoice instance;return instance;}// 语音配置接口void micvolume(int level) {std::cout << "语音->麦克风音量: " << level << "%" << std::endl;}void micsens(int level) {std::cout << "语音->麦克风灵敏度: " << level << "%" << std::endl;}void chatvolume(int level) {std::cout << "语音->聊天音量: " << level << "%" << std::endl;}
};
  1. 客户端直接调用示例
int main() {// 图形配置Graphic& graphic = Graphic::getInstance();graphic.display(false);graphic.effect(true);graphic.resolution(1);graphic.antialiasing(true);std::cout << "------------------------" << std::endl;// 声音配置Sound& sound = Sound::getInstance();sound.bgsound(true);sound.envirsound(true);sound.expsound(false);sound.setvolume(75);std::cout << "------------------------" << std::endl;// 语音配置ChatVoice& chat = ChatVoice::getInstance();chat.micvolume(80);chat.micsens(60);chat.chatvolume(90);return 0;
}

8.2 外观模式实现

模式结构(Mermaid类图)

Client
-main()
Facade
+LowConfComputer()
+HighConfComputer()
Graphic
+display()
+effect()
Sound
+bgsound()
+setvolume()
ChatVoice
+micvolume()
+chatvolume()

外观类实现

class ConfigFacade {
private:// 单件模式实现ConfigFacade() = default;ConfigFacade(const ConfigFacade&) = delete;ConfigFacade& operator=(const ConfigFacade&) = delete;~ConfigFacade() = default;public:static ConfigFacade& getInstance() {static ConfigFacade instance;return instance;}// 低配置方案void lowConfigSetup() {Graphic& g = Graphic::getInstance();g.display(true);    // 全屏降低资源消耗g.effect(false);    // 关闭特效g.resolution(2);    // 低分辨率g.antialiasing(false);Sound& s = Sound::getInstance();s.bgsound(false);s.envirsound(false);s.expsound(false);s.setvolume(15);ChatVoice& c = ChatVoice::getInstance();c.micvolume(20);c.micsens(50);c.chatvolume(60);}// 高配置方案void highConfigSetup() {Graphic& g = Graphic::getInstance();g.display(false);   // 窗口模式g.effect(true);     // 开启特效g.resolution(0);    // 最高分辨率g.antialiasing(true);Sound& s = Sound::getInstance();s.bgsound(true);s.envirsound(true);s.expsound(true);s.setvolume(50);ChatVoice& c = ChatVoice::getInstance();c.micvolume(100);c.micsens(100);c.chatvolume(100);}
};

客户端通过外观调用

int main() {ConfigFacade& facade = ConfigFacade::getInstance();std::cout << "【低配置电脑配置】" << std::endl;facade.lowConfigSetup();std::cout << "\n【高配置电脑配置】" << std::endl;facade.highConfigSetup();return 0;
}
«main»
Client
-main()
ConfigFacade
+lowConfigSetup()
+highConfigSetup()
Graphic
+display()
+effect()
+resolution()
+antialiasing()
Sound
+bgsound()
+envirsound()
+expsound()
+setvolume()
ChatVoice
+micvolume()
+micsens()
+chatvolume()

8.3 家庭影院案例

系统架构(Mermaid组件图)

控制
控制
控制
控制
控制
客户端
HomeTheaterFacade
Screen
Light
Speaker
DVDPlayer
GameConsole

子系统实现

// 屏幕
class Screen {
public:void on() { std::cout << "屏幕升起" << std::endl; }void off() { std::cout << "屏幕降下" << std::endl; }void setInput(int input) { std::cout << "设置输入源: " << (input==1?"HDMI":"AV") << std::endl;}
};// 灯光
class Light {
public:void on() { std::cout << "灯光开启" << std::endl; }void off() { std::cout << "灯光关闭" << std::endl; }void dim(int level) { std::cout << "灯光调暗至: " << level << "%" << std::endl;}
};// 音箱
class Speaker {
public:void on() { std::cout << "音箱开启" << std::endl; }void off() { std::cout << "音箱关闭" << std::endl; }void setMode(int mode) {std::cout << "设置音效模式: " << (mode==1?"立体声":"环绕声") << std::endl;}
};// DVD播放器
class DVDPlayer {
public:void on() { std::cout << "DVD播放器开启" << std::endl; }void off() { std::cout << "DVD播放器关闭" << std::endl; }void play(const std::string& movie) {std::cout << "播放电影: " << movie << std::endl;}
};// 游戏机
class GameConsole {
public:void on() { std::cout << "游戏机开启" << std::endl; }void off() { std::cout << "游戏机关闭" << std::endl; }void loadGame(const std::string& game) {std::cout << "加载游戏: " << game << std::endl;}
};

外观类协调

class HomeTheaterFacade {
private:Screen screen;Light light;Speaker speaker;DVDPlayer dvd;GameConsole game;public:void watchMovie(const std::string& movie) {// 观影模式std::cout << "\n=== 开始观影 ===" << std::endl;screen.on();screen.setInput(1);  // HDMI输入light.dim(20);speaker.on();speaker.setMode(2);  // 环绕声dvd.on();dvd.play(movie);game.off();}void playGame(const std::string& gameName) {// 游戏模式std::cout << "\n=== 开始游戏 ===" << std::endl;screen.on();screen.setInput(2);  // AV输入light.on();speaker.on();speaker.setMode(1);  // 立体声dvd.off();game.on();game.loadGame(gameName);}void shutdown() {// 关机流程std::cout << "\n=== 系统关闭 ===" << std::endl;screen.off();light.off();speaker.off();dvd.off();game.off();}
};
  1. 客户端调用示例
int main() {HomeTheaterFacade theater;theater.watchMovie("《阿凡达2》");theater.playGame("《塞尔达传说》");theater.shutdown();return 0;
}

模式总结

核心原则

原则说明
迪米特法则一个对象应只与直接朋友交互,降低系统耦合
最少知识原则客户端只需了解外观类,无需知道子系统细节

适用场景

  1. 子系统复杂:存在多个独立子系统需要统一入口
  2. 分层架构:需要为不同层次提供统一接口
  3. 第三方库:封装底层API供上层调用

模式优缺点

优点缺点
简化客户端调用可能增加外观类复杂度
降低子系统耦合不符合开闭原则(修改外观类)
提高系统可维护性
http://www.dtcms.com/wzjs/162901.html

相关文章:

  • 网站专题制作 公司搜索引擎排名谷歌
  • 成都彩票网站建设b站推广引流最佳方法
  • 威海网站建设哪家的好提升seo排名平台
  • 有哪些档案网站外链在线发布工具
  • 做鸡网站青岛疫情最新情况
  • 常州网站建设常州申请网址怎么申请的
  • 旅游外贸网站建设推广公司网站如何推广
  • 独立站引流的方式有哪些seo网站收录工具
  • 牛b插网站建设电商运营推广
  • 哪个网站可以做专业兼职微信scrm
  • 怎样成立一个网站平台推广怎么做
  • 对于诈骗网站怎么做百度推广代理加盟
  • 上海经营性网站备案爱站网seo工具
  • 福建做网站的公司重庆人力资源和社会保障网官网
  • 龙岩小程序app重庆seo优化推广
  • 开题报告 网站建设饥饿营销的十大案例
  • 北京电子商务网站制作优化服务
  • 做装修效果图的网站有哪些软件推广软文平台
  • 密云郑州阳网站建设百度客户端电脑版下载
  • 邢台无忧网站建设公司昆明百度推广开户费用
  • 新手做地方门户网站网络营销的重要性与意义
  • 公司起名自动生成器关键词优化平台有哪些
  • 党委网站建设方案搜索排名优化软件
  • 懒人做图网站搜外网友情链接
  • 做网站推广的公司好做吗关键词快速排名怎么做
  • 阜宁网站制作服务会员制营销方案
  • 住房城乡建设委网站灰色行业怎么推广引流
  • 贵阳市花溪区建设局网站推广平台排名前十名
  • 接入商 济南网站建设目前最好的营销模式
  • 国内有名的软件开发公司排名在线seo诊断