设计模式观后(c++还原之十二 命令模式)
来源:互联网 发布:ubuntu进图形界面 编辑:程序博客网 时间:2024/05/16 02:10
以前在github给自己写日记习惯了,现在csdn写东西还是要更加规范点,以后还是写完全能编译的代码吧!
#include <iostream>#include <stdlib.h>#include <string>#include <list>#include <vector>#include <map>using std::map;using std::endl;using std::cout;using std::list;using std::vector;using std::string;//命令模式//作者前面的设计感觉可以归纳为,类的函数封装与类之间的父子关系。//最近的两个模式让我觉得,作者已经开始进入;类与类的关系,类与类的调用与封装了。//先看命令模式的示例: 需求组、美工组、代码组、客户类每增加一个需求就会多次无序调用这三个组//所以需要设计一个类似中介的类class Group {//抽象组类,作者一贯习惯public:virtual void Find() = 0;virtual void Add() = 0;virtual void Delete() = 0;virtual void Change() = 0;virtual void Plan() = 0;};//分别实现三组class RequirementGroup : public Group {public:void Find() {cout << "require find" << endl;}void Add() {cout << "require add" << endl;}void Change() {cout << "require change" << endl;}void Plan() {cout << "require plan" << endl;}void Delete() {cout << "require delete" << endl;}};class PageGroup : public Group {public:void Find() {cout << "page find" << endl;}void Add() {cout << "page add" << endl;}void Change() {cout << "page change" << endl;}void Plan() {cout << "page plan" << endl;}void Delete() {cout << "page delete" << endl;}};class CodeGroup : public Group {public:void Find() {cout << "code find" << endl;}void Add() {cout << "code add" << endl;}void Change() {cout << "code change" << endl;}void Plan() {cout << "code plan" << endl;}void Delete() {cout << "code delete" << endl;}};//封装客户的命令,产生命令类class Command {protected:RequirementGroup* p_rg;PageGroup* p_pg;CodeGroup* p_cg;public:Command(): p_rg(new RequirementGroup), p_pg(new PageGroup), p_cg(new CodeGroup){}virtual void execute() = 0;};class AddRequirementCommand : public Command {public://客户添加需求void execute() {p_rg->Find();p_rg->Add();p_rg->Plan();}};class DeletePageCommand : public Command {public:void execute() {p_pg->Find();p_rg->Delete();p_rg->Plan();}};class Invoker {private:Command* p_command;public:void SetCommand(Command* p_c) {p_command = p_c;}void action() {p_command->execute();}};class Client {public:static void Main() {//删除页面操作Invoker* p_in = new Invoker;Command* p_co = new DeletePageCommand;p_in->SetCommand(p_co);p_in->action();}};
<span style="font-family: Arial, Helvetica, sans-serif;">//命令模式基本三个角色</span>
<pre name="code" class="cpp">//接收者(工作组)、命令者(command)、调用者(invoker).都要看情况设置抽象类和具体类//扩展,添加命令就好
int _tmain(int argc, _TCHAR* argv[]){Client::Main();system("pause");return 0;}
0 0
- 设计模式观后(c++还原之十二 命令模式)
- 设计模式观后(c++还原之二十二 访问者模式)
- 设计模式C++之十二(Command命令模式)
- 设计模式(c++)笔记之十二(Proxy模式)
- 设计模式(c++)笔记之二十二(Iterator模式)
- 设计模式观后(c++还原之五 单例模式)
- 设计模式观后(c++还原之六 工厂模式)
- 设计模式观后(c++还原之七 模板方法模式)
- 设计模式观后(c++还原之八 建造者模式)
- 设计模式观后(c++还原之九 代理模式)
- 设计模式观后(c++还原之十 代理模式)
- 设计模式观后(c++还原之十一 中介者模式)
- 设计模式观后(c++还原之十三 责任链模式)
- 设计模式观后(c++还原之十四 修饰模式)
- 设计模式观后(c++还原之十五 策略模式)
- 设计模式观后(c++还原之十六 适配器模式)
- 设计模式观后(c++还原之十七 迭代器模式)
- 设计模式观后(c++还原之十八 组合模式)
- [数据结构] 单向链表
- mysql 按年度、季度、月度、周、日SQL统计查询
- 主席树(动态维护第k大的树)zoj2112
- http://www.unitymanual.com/thread-25242-1-1.html
- Python读取excel的基本方法-源代码
- 设计模式观后(c++还原之十二 命令模式)
- 多线程003 - 再谈CyclicBarrier
- OpenCV训练分类器制作xml文档
- git的重要命令
- Java.lang包的简单介绍
- WordPress中URL静态化设置处理方式
- 动态加载jar包和jar包签名及dsa加密和keytool工具详细介绍
- Ubuntu软件升级重启后,无法登陆,光标闪烁
- 嵌入式系统编程和调试技巧