设计模式—命令模式(十九)
来源:互联网 发布:淘宝义兴张烧鸡 编辑:程序博客网 时间:2024/05/19 12:39
软件领域中的设计模式的重要性不言而喻。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态。虽然知道这些特性的定义但是并没有做到真正的理解,这样特性有什么作用?用于什么场合中等等问题,带着疑问开始学习设计模式,主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求队列或记录请求日志,以及支持可撤销的操作;
特点:一、建立命令队列;二、可以将命令记入日志;三、接收请求的一方可以拒绝;四、添加一个新命令类不影响其它类;
命令模式把请求一个操作的对象与知道怎么操行一个操作的对象分开;
#include <iostream>#include <string>#include <vector>using namespace std;class Receiver{public:virtual void Action(){cout << "接收命令" << endl;}};class Command{public:Receiver* m_rece;Command(Receiver* m_temp){m_rece = m_temp;}virtual void Excute() = 0;};class ConcreteCommand :public Command{public:ConcreteCommand(Receiver* m_p) :Command(m_p){}virtual void Excute(){m_rece->Action();}};class Invoker{private:Command* m_Com;public:void SetCommand(Command* m_temp){m_Com = m_temp;}void Notify(){m_Com->Excute();}};int main(){Receiver* T = new Receiver();Command* C = new ConcreteCommand(T);Invoker* m_In = new Invoker();m_In->SetCommand(C);m_In->Notify();return 0;}例:
#include <iostream>#include <string>#include <vector>using namespace std;//烤肉师傅class Barbucer{public:void MakeMutton(){cout << "烤羊肉" << endl;}void MakeChickenWing(){cout << "烤鸡翅膀" << endl;}};//抽象命令类class Command{protected:Barbucer* receiver;public:Command(Barbucer* temp){receiver = temp;}virtual void ExecuteCmd() = 0;virtual string show() = 0;};//烤羊肉命令class BakeMuttonCmd : public Command{private:string name = "烤羊排";public:BakeMuttonCmd(Barbucer* temp) : Command(temp){}virtual void ExecuteCmd(){receiver->MakeMutton();}virtual string show(){return name;}};//烤鸡翅class ChickenWingCmd : public Command{private:string name = "烤鸡翅";public:ChickenWingCmd(Barbucer* temp) : Command(temp){}virtual void ExecuteCmd(){receiver->MakeChickenWing();}virtual string show(){return name;}};//服务员类class Waiter{protected:vector<Command*> m_commandList;public:void SetCmd(Command* temp){m_commandList.push_back(temp);cout << "增加订单 " << temp->show()<< endl;}//通知执行void Notify(){cout << "客户的菜单日志如下:" << endl;for (Command* p : m_commandList){p->ExecuteCmd();}}};//客户端int main(){//店里添加烤肉师傅、菜单、服务员等顾客Barbucer* barbucer = new Barbucer();Command* cmd = new BakeMuttonCmd(barbucer);Command* cmd2 = new ChickenWingCmd(barbucer);Waiter* girl = new Waiter();//点菜girl->SetCmd(cmd);girl->SetCmd(cmd2);//服务员通知girl->Notify();return 0;}
阅读全文
0 0
- 设计模式—命令模式(十九)
- 设计模式(十九)命令模式
- 设计模式笔记(十九) —— 命令模式
- 设计模式(十九)——命令模式
- (十九)命令模式
- 十九、命令模式——设计模式学习笔记
- 设计模式实现(十九)---命令模式(Command)
- 设计模式C++实现十九:命令模式
- 设计模式之十九:命令模式(Command)
- Java设计模式《十九》命令模式
- 设计模式之十九------Command(命令)
- Java设计模式(十九)----备忘录模式
- 设计模式(十九) 备忘录模式
- Android设计模式(十九)-适配器模式
- 十九、命令模式
- 十九、适配器设计模式
- JAVA设计模式(二十九)——设计模式总结
- 设计模式学习(十九)————迭代器模式
- 梯度下降法
- python文件管理
- Java实现-有效的括号序列
- CSS3-购物车飞入动画
- gradle项目与maven项目相互转化(转)
- 设计模式—命令模式(十九)
- Java关于Integer包装类的一个坑
- java-函数
- 一分钟了解““Matlab产生随机整数randi””
- Spring框架中获取连接池的四种方式
- 机器人端(ROS/UBUNTU)开机自启动的方法和步骤
- Git的初始化以及仓库的创建和操作
- Android向sdCard中写文件
- 交换排序