命令模式
来源:互联网 发布:淘宝明星店铺怎么申请 编辑:程序博客网 时间:2024/06/11 02:11
烧烤店老板Barbecuer类,这个类可以烤各种食物。还定义一个抽象类命令类--Command(图中是订单类),子类是各种具体命令。由于订单类中的订单必须执行,所以订单类中要有一个Barbecuer对象(关联关系)。有一个服务员类,整理顾客命令,该类中有一个list放置Command,故与Command类至少为关联关系。
Command类中要有一个excute()函数,用于命令执行
void excute(receiver)//receiver是命令接受者,也就是烧烤者
{
receiver.makeA();//如果当前是具体命令B类,则调用receiver.makeB();
}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 命令模式{ class Barbecuer { public void makeA() { Console.WriteLine("烤羊肉"); } public void makeB() { Console.WriteLine("烤鸡翅"); } } abstract class Command { protected Barbecuer receiver; public Command(Barbecuer receiver) { this.receiver = receiver; } public abstract void excute(); } class CommandA:Command { public CommandA(Barbecuer receiver) : base(receiver) { } public override void excute() { receiver.makeA(); } } class CommandB : Command { public CommandB(Barbecuer receiver) : base(receiver) { } public override void excute() { receiver.makeB(); } } class Waiter { private List<Command> lst = new List<Command>(); public void add(Command cmd) { lst.Add(cmd); Console.WriteLine("添加" + cmd.ToString()); } public void delete(Command cmd) { lst.Remove(cmd); Console.WriteLine("删除" + cmd.ToString()); } public void Notify() { foreach (Command x in lst) { x.excute(); } } } class Program { static void Main(string[] args) { Barbecuer boy = new Barbecuer(); Command cmd1 = new CommandA(boy); Command cmd2 = new CommandA(boy); Command cmd3 = new CommandA(boy); Command cmd4 = new CommandB(boy); Waiter girl = new Waiter(); //开门营业 顾客点菜 girl.add(cmd1); girl.add(cmd2); girl.add(cmd3); girl.add(cmd4); girl.delete(cmd3); //点菜完闭,通知厨房 girl.Notify(); Console.Read(); } }}
添加命令模式.CommandA添加命令模式.CommandA添加命令模式.CommandA添加命令模式.CommandB删除命令模式.CommandA烤羊肉烤羊肉烤鸡翅
阅读全文
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 【剑指offer-解题系列(39)】二叉树的深度
- 数据结构四双向链表
- JavaWeb 案例——访问权限控制
- Mac 10.11.6 让Matlab2014b 使用Xcode8.1进行mex编译的方法
- 数据结构之动态数组 (C++类模板实现)
- 命令模式
- mongdb的插入深入
- ioc 代码
- 动态输出一个任意行列的表格
- 数据结构之链表 (C++类模板实现)
- 以后需要注意的一些Java开发规范
- Java进阶--Integer与int的种种比较
- USB之high-speed high-bandwidth endpoint
- Html学习-之bootstrap,datatables,datatimepicker,java string截取