设计模式漫谈之命令模式
Posted wang-charle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式漫谈之命令模式相关的知识,希望对你有一定的参考价值。
有一段时间没有写博客了,中间去广州调研需求一段时间。也是各种曲折,又一次感悟到老程序员最重要的是工作习惯,工作态度,工作经验,这些是新入行的没法比的。因为他们还不知道自己是否要做程序员。
昨天第一次去女朋友家。还算顺利。最近可心烦,工作上的事,资金上的事。就想写篇博客压压惊,静静心。
在面向对象的世界里,两个对象想发生任何关系,必须满足,想发生关系的对象可以访问到另一个对象的空间。即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();
总结:程序员最重要的是编程思想,最后语言只是思想的具体实现。抽象对抽象设计,未来的对象想发生关系,必须能访问到有关系对象的空间。封装就是封装不同对象关系的宿主对象。命令就是动作,动作对应方法,命令模式就是封装方法。所有类型从个数上区分,分单个对象,多个对象类型。
父亲节最好的礼物,应该是我快订婚了,哈哈
以上是关于设计模式漫谈之命令模式的主要内容,如果未能解决你的问题,请参考以下文章