設計模式漫談之命令模式

  有一段時間沒有寫博客了,中間去廣州調研需求一段時間。也是各類曲折,又一次感悟到老程序員最重要的是工做習慣,工做態度,工做經驗,這些是新入行的無法比的。由於他們還不知道本身是否要作程序員。程序員

昨天第一次去女友家。還算順利。最近可心煩,工做上的事,資金上的事。就想寫篇博客壓壓驚,靜靜心。編程

 

在面向對象的世界裏,兩個對象想發生任何關係,必須知足,想發生關係的對象能夠訪問到另外一個對象的空間。即A對象想和B對象發生關係,A對象必須存B對象的引用。ide

 

在面向對象的世界裏,全部東西都有宿主,方法,屬性,事件的宿主是類,類的宿主是模塊,模塊的宿主是程序集,程序集的宿主是程序域,程序域的數據是進程。this

 

對象知道其空間裏的全部東西,也知道類空間裏的東西。設計

命令模式,就是對不一樣的命令對象進行統一的解釋。對象

直接上例子,我來解釋:繼承

//須要繼承的對象,進程

//A能夠訪問B對象,抽象的把關係說清楚事件

public abstract class Command
{cmd

//子類對象能夠訪問的關係對象
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();

 

總結:程序員最重要的是編程思想,最後語言只是思想的具體實現。抽象對抽象設計,將來的對象想發生關係,必須能訪問到有關係對象的空間。封裝就是封裝不一樣對象關係的宿主對象。命令就是動做,動做對應方法,命令模式就是封裝方法。全部類型從個數上區分,分單個對象,多個對象類型。

父親節最好的禮物,應該是我快訂婚了,哈哈

相關文章
相關標籤/搜索