命令模式(Command)

定义

命令模式(Command),将一个请求封闭为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排除或记录请求日志,以及支持可撤销的操作。

类图

描述

Command:定义命令的统一接口;

ConcreteCommand:Command接口的实现者,要执行的具体命令;

Receiver:命令的实际执行者;

Invoker:命令的请求者,是命令模式中最重要的角色,用来对各个命令进行控制。

应用场景

顾客在餐馆用餐的时候,首先由顾客点餐,服务员记录顾客的点餐情况,然后服务员把订单传到后厨,厨师根据订单把顾客点的餐烹饪好。

    /// <summary>
/// 厨师
/// </summary>
public class Chef
{
public void CookBeef()
{
Console.WriteLine("大厨开始爆炒牛肉.");
Console.WriteLine("爆炒牛肉出锅.");
} public void CookFish()
{
Console.WriteLine("大厨开始水煮鱼.");
Console.WriteLine("水煮鱼出锅.");
} public void CookEggplant()
{
Console.WriteLine("大厨开始红烧茄子.");
Console.WriteLine("红烧茄子出锅.");
}
} public abstract class Command
{
public string Name { get; set; }
public abstract void Cook();
} /// <summary>
/// 爆炒牛肉
/// </summary>
public class CookBeefCommand : Command
{
private Chef chef; public CookBeefCommand(Chef chef)
{
this.chef = chef;
base.Name = "爆炒牛肉";
} public override void Cook()
{
this.chef.CookBeef();
}
} /// <summary>
/// 红烧茄子
/// </summary>
public class CookEggplantCommand : Command
{
private Chef chef; public CookEggplantCommand(Chef chef)
{
this.chef = chef;
base.Name = "红烧茄子";
} public override void Cook()
{
this.chef.CookEggplant();
}
} /// <summary>
/// 水煮鱼
/// </summary>
public class CookFishCommand : Command
{
private Chef chef; public CookFishCommand(Chef chef)
{
this.chef = chef;
base.Name = "水煮鱼";
} public override void Cook()
{
this.chef.CookFish();
}
} /// <summary>
/// 服务员
/// </summary>
public class Waiter
{
private List<Command> commands; public Waiter()
{
this.commands = new List<Command>();
} public void SetOrder(Command command)
{
this.commands.Add(command);
Console.WriteLine("增加订单:" + command.Name);
} public void CancelOrder(Command command)
{
this.commands.Remove(command);
Console.WriteLine("取消订单:" + command.Name);
} public void Notify()
{
foreach (Command command in this.commands)
{
command.Cook();
}
}
}

设计模式之笔记--命令模式(Command)的更多相关文章

  1. 设计模式 笔记 命令模式 Command

    //---------------------------15/04/25---------------------------- //Conmmand  命令模式----对象行为型模式 /* 1:意 ...

  2. Java-马士兵设计模式学习笔记-命令模式

    一.概述 命令模式 二.代码 1.Client.java public class Client { public void request(Server server){ server.addCom ...

  3. 学习笔记——命令模式Command

    命令模式,将具体操作Receiver封在Command中,调用类只需要知道Command即可.

  4. 《JAVA设计模式》之命令模式(Command)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. ...

  5. 命令模式 Command 行为型 设计模式(十八)

    命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 ...

  6. 设计模式 ( 十三 ) 命令模式Command(对象行为型)

    设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述         在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...

  7. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  8. Java 设计模式系列(十四)命令模式(Command)

    Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...

  9. 设计模式 - 命令模式(command pattern) 多命令 具体解释

    命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...

随机推荐

  1. MySQL一主两从

    服务器说明: MySQL-Master:192.168.1. MySQL-Slave1:192.168.1. MySQL-Slave2:192.168.1. 关闭防火墙,关闭selinux 统一采用源 ...

  2. [三]SpringBoot 之 热部署

    如下配置 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring ...

  3. 小结ospf基本配置的三个参数

    实例:<华为路由器学习指南>P712 OSPF基本功能配置示例拓扑结构 配置思路:以E为例子 [E]ospf 100 router-id 5.5.5.5[E-ospf-100]area 1 ...

  4. XML格式化加载的时候提示Content is not allowed in prolog. Nested exception: Content is not allowed in prolog

    原因:原本是.xml文件格式的内容,被你用右键,文本编辑,保存,导致格式不认了. 解决方法:下载个notepad+ 工具,用这工具打开,修改,编辑,保存,即可被继续认作xml格式.

  5. poj 1945 Power Hungry Cows A*

    Description:     就是给你一个数,你可以把它自乘,也可以把他乘或除以任意一个造出过的数,问你最多经过多少次操作能变换成目标数 思路:这题真的不怎么会啊.n = 20000,每一层都有很 ...

  6. CentOS 7网络故障

    By francis_hao    Nov 2,2017   在像往常一样打开了虚拟机后,打开xshell准备连接到centos,可是连不上,发现连接的网卡没有启动,使用systemctl启动netw ...

  7. NYOJ--139

    原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=139 分析:cantor展开,康托展开用于计算一个排列的序数.公式为: X=a[n]*n! ...

  8. Linux系统之路——python多版本共存问题(ps:自行切换python版本,pip安装遇到的一些问题)

    经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...

  9. STL源码分析-rotate

    http://note.youdao.com/noteshare?id=4ba8ff81aa96373ba11f1b82597ec73a

  10. discuz开发,登录次数过多,锁定解决方法

    到数据库里的表找到pre_common_failedlogin 和pre_ucenter_failedlogins清空里面的内容即可. truncate table pre_common_failed ...