你忘了你的S.O.L.I.D原則,特別是Dependancy Inversion
不要在一個方式,它特別需要一個具體的執行力度像,BuyStockOrder
或SellStockOrder
定義界面。
相反,定義您的界面以期望像CommandRequest
這樣的抽象,您將發送具體的CommandRequest
暗示,而不必更改界面。
然後你的Receiver
implimentation可以決定如何處理它,當然正確的方式來處理這將使用Strategy Pattern但我會留給你。
下面是一些代碼作爲一個簡單的例子:
public class Receiver : IReceiver
{
public CommandResult Process(CommandRequest request)
{
// Check the type of request and handle appropriately (or send to who can handle it)
return new Result();
}
}
public interface IReceiver
{
CommandResult Process(CommandRequest request);
}
public abstract class CommandResult
{
public bool Successful { get; set; }
}
public abstract class CommandRequest
{
}
public class Result : CommandResult
{
}
public class BuyStock : CommandRequest
{
public string Name { get; set; }
public decimal Value { get; set; }
}
public class SellStock : CommandRequest
{
public string Name { get; set; }
public decimal Value { get; set; }
}
internal class Program
{
private static void Main(string[] args)
{
var receiver = new Receiver();
var result = receiver.Process(new SellStock { Name = "PAYPL", Value = 100.20m });
Console.WriteLine(result.Successful ? "Yay!" : "Boo!");
}
}
這是否幫助? http://blog.everymansoftware.com/2012/01/command-invoker-pattern-with-openclosed.html – 2015-02-24 12:41:33
不完全是因爲在提供的例子中,沒有實際的Receiver類,它應該是可響應的,以便實際執行與命令相對應的操作。 – Lopina 2015-02-24 13:23:09