设计模式漫谈之命令模式

  有一段时间没有写博客了,中间去广州调研需求一段时间。也是各种曲折,又一次感悟到老程序员最重要的是工作习惯,工作态度,工作经验,这些是新入行的没法比的。因为他们还不知道自己是否要做程序员。

昨天第一次去女朋友家。还算顺利。最近可心烦,工作上的事,资金上的事。就想写篇博客压压惊,静静心。

在面向对象的世界里,两个对象想发生任何关系,必须满足,想发生关系的对象可以访问到另一个对象的空间。即A对象想和B对象发生关系,A对象必须存B对象的引用。

在面向对象的世界里,所有东西都有宿主,方法,属性,事件的宿主是类,类的宿主是模块,模块的宿主是程序集,程序集的宿主是程序域,程序域的数据是进程。

对象知道其空间里的所有东西,也知道类空间里的东西。

命令模式,就是对不同的命令对象进行统一的解释。

直接上例子,我来解释:

//需要继承的对象,

//A可以访问B对象,抽象的把关系说清楚

public abstract class Command
{

//子类对象可以访问的关系对象
protected Barbecuer receiver;

public Command(Barbecuer receiver)
{
this.receiver = receiver;
}

//需要具体写的方法
abstract public void ExcuteCommand();
}

//具体的关系对象,对抽象对象负责任的对象,具有对象空间的对象

class BakeMuttonCommand : Command
{
public BakeMuttonCommand(Barbecuer receiver)
: base(receiver)
{ }

//重写的方法

public override void ExcuteCommand()
{
receiver.BakeMutton();
}
}

//关系对象

public class Barbecuer
{

//对象中的空间成员
public void BakeMutton()
{
Console.WriteLine("烤羊肉串!");
}

//对象中的空间成员方法

public void BakeChickenWing()
{
Console.WriteLine("烤鸡翅!");
}
}

//继续封装,就是向上层继续发生关系

public class Waiter
{

//原则是抽象对抽象
private IList<Command> orders = new List<Command>();

//过滤对象
public void SetOrder(Command command)
{
if (command.ToString() == "命令模式.BakeChickenWingCommand")
{
Console.WriteLine("服务员:鸡翅没有了,请点别的烧烤。");
}
else
{
orders.Add(command);
Console.WriteLine("增加订单:" + command.ToString() + " 时间:" + DateTime.Now.ToString());
}
}


public void CancelOrder(Command command)
{
orders.Remove(command);
Console.WriteLine("取消订单:" + command.ToString() + " 时间:" + DateTime.Now.ToString());
}


public void Notify()
{
foreach (Command cmd in orders)
{
cmd.ExcuteCommand();
}
}
}

//空间对象

//发生关系执行关系中的动作

Barbecuer boy = new Barbecuer();
Command bakeMuttonCommand1 = new BakeMuttonCommand(boy);
Command bakeMuttonCommand2 = new BakeMuttonCommand(boy);
Command bakeChickenWingCommand1 = new BakeChickenWingCommand(boy);
Waiter girl = new Waiter();


girl.SetOrder(bakeMuttonCommand1);
girl.SetOrder(bakeMuttonCommand2);
girl.SetOrder(bakeChickenWingCommand1);


girl.Notify();

总结:程序员最重要的是编程思想,最后语言只是思想的具体实现。抽象对抽象设计,未来的对象想发生关系,必须能访问到有关系对象的空间。封装就是封装不同对象关系的宿主对象。命令就是动作,动作对应方法,命令模式就是封装方法。所有类型从个数上区分,分单个对象,多个对象类型。

父亲节最好的礼物,应该是我快订婚了,哈哈

原文地址:https://www.cnblogs.com/wang-charle/p/9192088.html