命令模式(Command)
2009-12-13 14:16
239 查看
重要概念
1.命令抽象类,也是命令模式的核心理解
2.命令模式能较容易的设计一个命令队列,在需要的情况下,可以容易地将命令计入日志,并允许接收请求的一方可以判断否决掉请求。
3.可以容易的实现对请求的撤销和重做。
4.由于加进新的具体命令类不影响其他的类,因此添加新的具体命令类很容易。
5.命令模式把请求一个操作的对象与指导怎么执行的操作的对象通过命令对象分割开.
示例代码
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespace命令模式 { classProgram { staticvoidMain(string[]args) { Receiverr=newReceiver(); Commandc=newConcreteCommand(r); Invokeri=newInvoker(); //Setandexecutecommand i.SetCommand(c); i.ExecuteCommand(); Console.Read(); } } abstractclassCommand { protectedReceiverreceiver; publicCommand(Receiverreceiver) { this.receiver=receiver; } abstractpublicvoidExecute(); } classConcreteCommand:Command { publicConcreteCommand(Receiverreceiver):base(receiver){} publicoverridevoidExecute() { receiver.Action(); } } classReceiver { publicvoidAction() { Console.WriteLine("执行请求!"); } } classInvoker { privateCommandcommand; publicvoidSetCommand(Commandcommand) { this.command=command; } publicvoidExecuteCommand() { command.Execute(); } } }
羊肉串第三版
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespace命令模式
{
classProgram
{
staticvoidMain(string[]args)
{
//开店前的准备
Barbecuerboy=newBarbecuer();
CommandbakeMuttonCommand1=newBakeMuttonCommand(boy);
CommandbakeMuttonCommand2=newBakeMuttonCommand(boy);
CommandbakeChickenWingCommand1=newBakeChickenWingCommand(boy);
Waitergirl=newWaiter();
//开门营业顾客点菜
girl.SetOrder(bakeMuttonCommand1);
girl.SetOrder(bakeMuttonCommand2);
girl.SetOrder(bakeChickenWingCommand1);
//点菜完闭,通知厨房
girl.Notify();
Console.Read();
}
}
//服务员
publicclassWaiter
{
privateIList<Command>orders=newList<Command>();
//设置订单
publicvoidSetOrder(Commandcommand)
{
if(command.ToString()=="命令模式.BakeChickenWingCommand")
{
Console.WriteLine("服务员:鸡翅没有了,请点别的烧烤。");
}
else
{
orders.Add(command);
Console.WriteLine("增加订单:"+command.ToString()+"时间:"+DateTime.Now.ToString());
}
}
//取消订单
publicvoidCancelOrder(Commandcommand)
{
orders.Remove(command);
Console.WriteLine("取消订单:"+command.ToString()+"时间:"+DateTime.Now.ToString());
}
//通知全部执行
publicvoidNotify()
{
foreach(Commandcmdinorders)
{
cmd.ExcuteCommand();
}
}
}
//抽象命令
publicabstractclassCommand
{
protectedBarbecuerreceiver;
publicCommand(Barbecuerreceiver)
{
this.receiver=receiver;
}
//执行命令
abstractpublicvoidExcuteCommand();
}
//烤羊肉串命令
classBakeMuttonCommand:Command
{
publicBakeMuttonCommand(Barbecuerreceiver)
:base(receiver)
{}
publicoverridevoidExcuteCommand()
{
receiver.BakeMutton();
}
}
//烤鸡翅命令
classBakeChickenWingCommand:Command
{
publicBakeChickenWingCommand(Barbecuerreceiver)
:base(receiver)
{}
publicoverridevoidExcuteCommand()
{
receiver.BakeChickenWing();
}
}
//烤肉串者
publicclassBarbecuer
{
publicvoidBakeMutton()
{
Console.WriteLine("烤羊肉串!");
}
publicvoidBakeChickenWing()
{
Console.WriteLine("烤鸡翅!");
}
}
}
相关文章推荐
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 设计模式在二维图形程序里的应用(命令模式--command)
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 18、命令模式(Command)
- Java面向对象设计模式(十八)——命令模式(Command)
- JAVA设计模式九:--Command(命令模式)
- 模式六:命令模式(Command Pattern)——封装请求对象
- 命令模式(Command)
- 设计模式【命令模式Command Pattern】
- 步步为营 .NET 设计模式学习笔记 九、Command(命令模式)
- 第16章 命令模式(Command Pattern)
- [C++设计模式] command 命令模式
- 设计模式之命令(Command)---对象行为型模式
- Java之命令模式(Command Pattern)
- 设计模式C++学习笔记之十二(Command命令模式)