Command Pattern
命令模式:使一个动作的发起方和接受方解耦。这就是说,我们不在乎这个动作是谁发起的,也不在乎是谁接受这个动作而采取什么行动,看起来,这个模式是相当松散的。
举个例子,使用command模式发送一个请求,我不在乎是用button还是link,因为他们只是2个不同的形式,同时,我希望能接收到我这个请求的不仅仅是人,还可以是手机,还可以是电脑。。,也就是说,我的接受方也是不固定的。
那么遇见这么松耦合的模式,第1反应就是想用委托。用委托来响应由其他任何物体激发的请求,然后又通过从外部传入Command对象的接受者来响应这个请求,那么Command的使命就完成了。
Command的两个关键点:Invorker & Receiver
class Program { delegate string Invorker(); static Invorker m_Action; static Invorker m_Undo; static void Main(string[] args) { new Command(new Receiver()); Console.WriteLine(m_Action()); Console.WriteLine(m_Undo()); Console.Read(); } public class Command { public Command(Receiver receiver) { m_Action = receiver.Action; m_Undo = receiver.Undo; } } public class Receiver { string str = "some string"; //oldStr用于撤销操作。 string oldStr,newStr; public string Action() { oldStr = newStr; return newStr += str; } public string Undo() { return oldStr; } } }
程序里直接在Program类里定义委托完全是为了方便,其实完全可以单独拿出一个类来做为Client,然后在这个Client类里定义委托。