C++设计模式之建造者模式(二)
来源:互联网 发布:微信跳转淘宝app 编辑:程序博客网 时间:2024/05/18 02:21
3、省略指挥者Director的建造者模式
指挥者类Director在建造者模式中扮演非常重要的作用,简单的Director类用于指导具体建造者如何构建产品,它按一定次序调用Builder的buildPartX()方法,控制调用的先后次序,并向客户端返回一个完整的产品对象。Direcotr针对抽象的建造者进行编程,如果需要不同的建造者,只需把建造者传入指挥者类,无需修改之前的代码。
在有些情况下,为了简化系统结构,可以省略指挥者Director,指挥者不再指导产品的创建过程。而是在Builder中提供逐步构建复杂产品对象的construct()方法。
暴风影音播放器是具体的产品,实现代码和上一篇博客一样,这里就不再呈现。有变化的是建造者类,播放模式.h头文件实现代码如下:
#ifndef _PLAY_PATTERN_H_#define _PLAY_PATTERN_H_#include <iostream>#include <string>#include "Player.h"using namespace std;//抽象播放模式class PlayPattern{protected://具体产品(播放器)Player * m_pPlayer;public:PlayPattern(){m_pPlayer = new Player();}~PlayPattern(){if( NULL != m_pPlayer ){delete m_pPlayer;m_pPlayer = NULL;}}//制造播放窗口virtual void BuildWindow() = 0;//制造播放菜单virtual void BuildMenu() = 0;//制造播放列表virtual void BuildPlayList() = 0;//制造播放进度条virtual void BuildControlBar() = 0;//制造收藏列表virtual void BuildCollectList() = 0;//开始建造,封装建造过程Player * StartConstruct(){BuildWindow();BuildMenu();BuildPlayList();BuildControlBar();BuildCollectList();return m_pPlayer;}};//完整播放模式class FullPattern : public PlayPattern{public:void BuildWindow();void BuildMenu();void BuildPlayList();void BuildControlBar();void BuildCollectList();};//精简播放模式class SimplePattern : public PlayPattern{public:void BuildWindow();void BuildMenu();void BuildPlayList();void BuildControlBar();void BuildCollectList();};//记忆播放模式class MemoryPattern : public PlayPattern{public:void BuildWindow();void BuildMenu();void BuildPlayList();void BuildControlBar();void BuildCollectList();};#endif指导者类不再指导暴风影音产品对象的创建过程,而是由抽象播放器模式StartConstruct方法来封装播放器产品的创建过程。
播放模式Cpp文件代码如下:
#include "PlayPattern.h"//制造播放窗口void FullPattern::BuildWindow(){m_pPlayer->SetWindow("主界面窗口");}//制造播放菜单void FullPattern::BuildMenu(){m_pPlayer->SetMenu("主菜单");}//制造播放列表void FullPattern::BuildPlayList(){m_pPlayer->SetPlayList("播放列表");}//制造播放进度条void FullPattern::BuildControlBar(){m_pPlayer->SetControlBar("进度条");}//制造收藏列表,完整播放模式没有收藏列表,内容设为空void FullPattern::BuildCollectList(){m_pPlayer->SetCollectList(" ");}////////////////精简模式///////////////////////////////void SimplePattern::BuildWindow(){m_pPlayer->SetWindow("主界面窗口");}void SimplePattern::BuildMenu(){m_pPlayer->SetMenu(" ");}void SimplePattern::BuildPlayList(){m_pPlayer->SetPlayList(" ");}void SimplePattern::BuildControlBar(){m_pPlayer->SetControlBar("进度条");}void SimplePattern::BuildCollectList(){m_pPlayer->SetCollectList(" ");}/////////////////记忆模式////////////////////////////////void MemoryPattern::BuildWindow(){m_pPlayer->SetWindow("主界面窗口");}void MemoryPattern::BuildMenu(){m_pPlayer->SetMenu(" ");}void MemoryPattern::BuildPlayList(){m_pPlayer->SetPlayList(" ");}void MemoryPattern::BuildControlBar(){m_pPlayer->SetControlBar("进度条");}void MemoryPattern::BuildCollectList(){m_pPlayer->SetCollectList("收藏列表");}完整播放模式下并不需要建造收藏列表部件,因此把收藏列表的内容设为空,其它情况类型,把不需要建造的部件内容设为空。测试程序实现代码如下:
#include <iostream>#include "PlayPattern.h"#include "Player.h"using namespace std;int main(){Player * pPlayer = NULL;/***********************完整播放模式************************/PlayPattern * pFullPattern = new FullPattern();cout << "完整播放模式:" << endl;pPlayer = pFullPattern->StartConstruct();pPlayer->Display(); /***********************精简播放模式************************/SimplePattern * pSimplePattern = new SimplePattern();cout << "精简播放模式:" << endl;pPlayer = pSimplePattern->StartConstruct();pPlayer->Display(); /***********************记忆播放模式************************/MemoryPattern * pMemoryPattern = new MemoryPattern();cout << "记忆播放模式:" << endl;pPlayer = pMemoryPattern->StartConstruct();pPlayer->Display();/***********************销毁操作****************************/cout << endl;delete pFullPattern;pFullPattern = NULL;delete pSimplePattern;pSimplePattern = NULL;delete pMemoryPattern;pMemoryPattern = NULL;return 0;}编译并执行,结果如下:
此时,StartConstruct()方法定义了其他buildPartX()方法调用的次序,为其他方法的执行提供了一个流程模板,这与我们在后面要学习的模板方法模式非常类似。对Director类的省略方式都不影响系统的灵活性和可扩展性,同时还简化了系统结构,但加重了抽象建造者类的职责,如果StartConstruct()方法较为复杂,待构建产品的组成部分较多,建议还是将StartConstruct()方法单独封装在Director中,这样做更符合“单一职责原则”
1 0
- C#--设计模式之建造者模式
- 设计模式c++(二)----Biluder建造者模式
- C++设计模式之建造者模式(二)
- Java设计模式之建造者模式(二)
- 设计模式(二)建造者模式
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- 设计模式二:建造模式
- 创建模式之二 建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 设计模式之建造者模式
- C# 设计模式之 建造者模式
- 【设计模式】之 Builder 建造者模式
- 设计模式之建造者模式学习
- 设计模式之建造者模式
- 王爽老师《汇编语言》第二章——寄存器 笔记
- Service+(Notification+)Thread+HttpPost
- Ubuntu下的Vim的Golang语法配置
- vs2012 opencv2.4.9配置 出现msvcp120d.dll文件丢失问题
- Map
- C++设计模式之建造者模式(二)
- 基数排序
- html
- c语言指针初探 一 内存管理
- ADO.NET-查询和检索数据
- oracle 两个时间相减结果
- Redhat Linux 硬盘挂载方法!!!
- TCO14 2A L1: SixteenBricks, Greedy
- C++中 overload 、override、overwrite 之间的区别