有一段時間沒有寫部落格了,中間去廣州調研需求一段時間。也是各種曲折,又一次感悟到老程式設計師最重要的是工作習慣,工作態度,工作經驗,這些是新入行的沒法比的。因為他們還不知道自己是否要做程式設計師。
昨天第一次去女朋友家。還算順利。最近可心煩,工作上的事,資金上的事。就想寫篇部落格壓壓驚,靜靜心。
在物件導向的世界裡,兩個物件想發生任何關係,必須滿足,想發生關係的物件可以訪問到另一個物件的空間。即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();
總結:程式設計師最重要的是程式設計思想,最後語言只是思想的具體實現。抽象對抽象設計,未來的物件想發生關係,必須能訪問到有關係物件的空間。封裝就是封裝不同物件關係的宿主物件。命令就是動作,動作對應方法,命令模式就是封裝方法。所有型別從個數上區分,分單個物件,多個物件型別。
父親節最好的禮物,應該是我快訂婚了,哈哈