設計模式漫談之命令模式

Wang_Charle發表於2018-06-17

  有一段時間沒有寫部落格了,中間去廣州調研需求一段時間。也是各種曲折,又一次感悟到老程式設計師最重要的是工作習慣,工作態度,工作經驗,這些是新入行的沒法比的。因為他們還不知道自己是否要做程式設計師。

昨天第一次去女朋友家。還算順利。最近可心煩,工作上的事,資金上的事。就想寫篇部落格壓壓驚,靜靜心。

 

在物件導向的世界裡,兩個物件想發生任何關係,必須滿足,想發生關係的物件可以訪問到另一個物件的空間。即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();

 

總結:程式設計師最重要的是程式設計思想,最後語言只是思想的具體實現。抽象對抽象設計,未來的物件想發生關係,必須能訪問到有關係物件的空間。封裝就是封裝不同物件關係的宿主物件。命令就是動作,動作對應方法,命令模式就是封裝方法。所有型別從個數上區分,分單個物件,多個物件型別。

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

相關文章