13.命令模式

简介:  1命令模式的核心内容是: A:发命令者,与实际不同的是,发命令者要求了实际由谁做菜,烤肉。 B:有两个级别的服务员,一个级别的服务员每次只收集一个命令;另外一类服务员可以同时收集多条命令,最后通知厨子和Barbecuer 2命令模式的作用:通过命令模式可以模拟到餐馆下单,服务员向厨子发命令的这个场景。 3命令模式具体描述 命令模式:命令模式把一个请


1命令模式的核心内容是:

A:发命令者,与实际不同的是,发命令者要求了实际由谁做菜,烤肉。

B:有两个级别的服务员,一个级别的服务员每次只收集一个命令;另外一类服务员可以同时收集多条命令,最后通知厨子和Barbecuer

2命令模式的作用:通过命令模式可以模拟到餐馆下单,服务员向厨子发命令的这个场景。

3命令模式具体描述

命令模式:命令模式把一个请求或者操作封装到一个对象中。

命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

命令模式允许请求的一方和发送的一方独立开来,

使得请求的一方不必知道接收请求的一方的接口,

更不必知道请求是怎么被接收,

以及操作是否执行,何时被执行以及是怎么被执行的。

系统支持命令的撤消。

 

俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,

她对我有什么指示,就写一张纸条让她弟弟带给我。这不,

她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,

哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最小气,

才请我吃面。”

4.命令模式类图

5.代码:

#include<iostream>

#include <string>

#include <list>

 

using namespace std;

//命令模式:命令模式把一个请求或者操作封装到一个对象中。

//命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

//命令模式允许请求的一方和发送的一方独立开来,

//使得请求的一方不必知道接收请求的一方的接口,

//更不必知道请求是怎么被接收,

//以及操作是否执行,何时被执行以及是怎么被执行的。

//系统支持命令的撤消。

//

//俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,

//她对我有什么指示,就写一张纸条让她弟弟带给我。这不,

//她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,

//哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最小气,

//才请我吃面。”

 

//接收者执行命令,这里相当于实际干活的人

class Barbecuer 

{

public:

    void bakeMutton()

    {

        cout << "烤羊肉串" << endl;

    }

    void bakeChickenWing()

    {

        cout << "烤鸡翅" << endl;

    }

};

 

//对某个人下达的命令

class Command   //命令基类

{

protected:

    Barbecuer *receiver;//类的包含

public:

    Command(Barbecuer *receiver)//命令接受

    {

        this->receiver = receiver;

    }

    //然后执行命令

    virtual void executeCommand() = 0;

};

 

//相当于命令的特化

class BakeMuttonCommand :public Command

{

public:

    BakeMuttonCommand(Barbecuer *receiver) :Command(receiver)

    {}

    void executeCommand()

    {

        receiver->bakeMutton();

    }

};

 

//命令的特化

class BakeChikenWingCommand :public Command

{

public:

    BakeChikenWingCommand(Barbecuer *receiver) :Command(receiver)

    {}

    void executeCommand()

    {

        receiver->bakeChickenWing();

    }

};

 

//服务员,这里是当条命令

class Waiter

{

private:

    Command *command;

public:

    void setOrder(Command *command)

    {

        this->command = command;

    }

    void notify()

    {

        command->executeCommand();

    }

};

 

//gei多个对象下达命令,下多条命令的情况

class Waiter2 

{

private:

    list<Command*> orders;

public:

    //下单

    void setOrder(Command *command)

    {

        orders.push_back(command);

    }

    //取消订单

    void cancelOrder(Command *command)

    {

    }

    //发出通知

    void notify()

    {

        list<Command*>::iterator iter = orders.begin();

        while (iter != orders.end())

        {

            (*iter)->executeCommand();

            iter++;

        }

    }

};

 

 

int main()

{

 

    Barbecuer *boy = new Barbecuer();

    Command *bm1 = new BakeMuttonCommand(boy);

    Command *bm2 = new BakeMuttonCommand(boy);

    Command *bc1 = new BakeChikenWingCommand(boy);

 

    Waiter2 *girl = new Waiter2();

 

    girl->setOrder(bm1);

    girl->setOrder(bm2);

    girl->setOrder(bc1);

 

    girl->notify();

 

 

    cin.get();

 

    return 0;

}

运行结果如下:

目录
相关文章
|
5月前
|
存储 设计模式 调度
行为型 命令模式
行为型 命令模式
25 1
|
4月前
|
设计模式 存储 Java
Java设计模式-命令模式
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。
29 1
Java设计模式-命令模式
|
9月前
|
设计模式 Java
|
5月前
|
存储
命令模式
命令模式
27 0
|
9月前
|
设计模式 Java
命令模式【Java设计模式】
命令模式【Java设计模式】
34 0
|
10月前
|
设计模式
命令模式解读
命令模式解读
|
11月前
|
存储 前端开发
关于命令模式我所知道的
关于命令模式我所知道的
72 0
|
存储 Java 程序员
行为型模式-命令模式
行为型模式-命令模式
92 0
|
设计模式 Java 中间件
Java设计模式 ->命令模式
Java设计模式 ->命令模式
68 0
|
设计模式 存储
我学会了,命令模式
命令模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
92 0
我学会了,命令模式