llopx

能跟您分享知识,是我的荣幸

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类里定义委托。

posted on 2009-12-21 21:40  llopx  阅读(169)  评论(0编辑  收藏  举报

导航