首页 > 代码库 > 命令模式
命令模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
命令模式
*
* 可以对操作相关命令处理进行过滤和取消回退的操作
* (让命令和操作分开来)
*/
namespace App_MYCS.HDL_SJMS.MLMS
{
class my_MLMS
{
public void dy()
{
Receiver r = new Receiver();
Command c = new concreteCommand(r);
Invoker i = new Invoker();
i.SetCommand(c);
i.ExecuteCommand();
}
}
//执行操作接口
abstract class Command
{
protected Receiver receiver;
public Command(Receiver r)
{
this.receiver = r;
}
abstract public void Execute();
}
//把接收者对象绑定于一个动作
class concreteCommand : Command
{
public concreteCommand(Receiver r)
: base(r)
{
}
public override void Execute()
{
receiver.Action();
}
}
class Invoker
{
private Command command;
public void SetCommand(Command c)
{
this.command = c;
}
public void ExecuteCommand()
{
command.Execute();
}
}
//
class Receiver
{
public void Action()
{
Console.WriteLine("执行请求");
}
}
//-----------------------------------------------------------
//点菜小例
public class Barbecuer
{
//相应的操作
public void Runfunction1()
{
Console.WriteLine("执行操作1");
}
public void Runfunction2()
{
Console.WriteLine("执行操作2");
}
}
public abstract class commands
{
//抽象出
protected Barbecuer r;
public commands(Barbecuer r)
{
this.r = r;
}
abstract public void ExcuteCommand();
}
class bake1 : commands
{
public bake1(Barbecuer r)
: base(r)
{
}
public override void ExcuteCommand()
{
r.Runfunction1();
}
}
class bake2 : commands
{
public bake2(Barbecuer r)
: base(r)
{
}
public override void ExcuteCommand()
{
r.Runfunction2();
}
}
public class Waiter
{
private IList<commands> orders = new List<commands>();
//设置
public void Setord(commands c)
{
//增加条件进通知的 c 命令进行过滤
orders.Add(c);
}
//取消
public void CancelOrder(commands c)
{
//取消之前增加的命令
orders.Remove(c);
}
//通知全部执行
public void Notify()
{
foreach (commands c in orders)
{
c.ExcuteCommand();
}
}
}
class MLMS_dy
{
public void dy()
{
Barbecuer boy = new Barbecuer();//详细的操作
commands bakec1 = new bake1(boy);//加载命令
commands bakec2 = new bake2(boy);//
Waiter g = new Waiter();
g.Setord(bakec1);
g.Setord(bakec2);
g.Notify();
}
}
}
命令模式