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;

}

运行结果如下:

目录
相关文章
|
6月前
|
前端开发 JavaScript Java
Java 学习路线规划及项目案例中的技术栈应用解析
内容包括:**Java 17核心特性**(如sealed class、record)与模块化开发;Spring Boot 3 + Spring Cloud微服务架构,涉及响应式编程(WebFlux)、多数据库持久化(JPA、R2DBC、MongoDB);云原生技术**如Docker、Kubernetes及CI/CD流程;性能优化(GraalVM Native Image、JVM调优);以及前后端分离开发(Vue 3、Spring Boot集成)。通过全栈电商平台项目实战,掌握从后端服务(用户、商品、订单)到前端应用(Vue 3、React Native)的全流程开发。
253 9
|
4月前
|
数据采集 存储 缓存
构建“天气雷达”一样的网页监控系统
证券级信息精准监测系统,具备雷达感知能力,实时探测网页变动,快速响应公告更新,助力投资决策抢占先机。
152 0
构建“天气雷达”一样的网页监控系统
|
4月前
|
数据采集 Java 数据挖掘
采集像列车:任务如何不脱轨、数据如何不漏采
每天自动抓取中文新闻站点的实战经验分享,涵盖代理配置、并发处理与热点提取,实现稳定高效的信息采集与推送。
采集像列车:任务如何不脱轨、数据如何不漏采
|
4月前
|
数据采集 缓存 JSON
GitHub 开源爆款工具|MediaCrawler:程序员零门槛采集抖音/小红书/B站等社交评论,30K star 背后的场景实战揭秘!
MediaCrawler 是一个支持多平台的社交媒体数据爬虫工具,覆盖小红书、抖音、B站等主流平台,提供关键词/ID爬取、评论采集、登录态缓存、代理池等功能,结合 Playwright 实现浏览器模拟,降低逆向难度,适合内容运营、数据分析等场景,开源免费,使用简便。
941 0
|
8月前
|
存储 人工智能 监控
通过Milvus和Langchain快速构建基于百炼大模型的LLM问答系统
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
4月前
|
数据采集 机器学习/深度学习 运维
闭源精密战与开源敏捷性:能源管理系统的双线引领
在能源管理数字化转型中,西门子 Smart ECX 与 MyEMS 代表两种典型路径:前者闭源商业、稳定可靠;后者开源灵活、自主可控。本文从实施成本、落地实践、技术支撑、新兴场景四大维度对比分析,揭示二者在中大型企业应用中的优势与局限,助力企业根据自身技术基础与战略方向做出匹配选择。
61 0
|
8月前
|
数据采集 存储 人工智能
RFID工业产线采集
在智能化工业时代,RFID(射频识别)技术作为先进的自动识别手段,在工业产线数据采集方面发挥核心作用。它通过无线电信号实现非接触式信息读写,贯穿生产全流程,从原材料入库到产品出货,大幅提升效率与可追溯性。尽管面临成本和数据安全挑战,但随着技术进步,RFID将与物联网、人工智能深度融合,推动工业4.0和智能制造发展,助力企业实现高效、智能的生产管理。