“踢狗”引发的委托 和 事件

                               踢狗”引发的委托 事件

话说您的客户看见了人人网上面的踢屁股游戏,想自己开发一套游戏,叫踢狗游戏,这老几真的超级抠门 才给了几百快钱,让设计一下,老板竟然接下来了,给了一个刚毕业的小小做这个程序。

    小小经过一天的努力中把程序设计出来了:

 

using System;

namespace LS.KickedDog1

{

        

          

          public class Dog

          {

                   public void  Kicked()                ///业务逻辑

                   {

             /*…一些代码…*/

                         Console.WriteLine("小狗跑了");    ///显示层

             /*…一些代码…*/

                   }

          }

          

          

         public class Kick

          {

                   public static void Main()

                   {

                         Dog dog=new Dog();

                         dog.Kicked(); 

                   }

          }

 

       小小很开心,把程序给公司项目经理王大拿看,王大拿看了一眼,说设计的不行啊,您要加强学习啊,小小很奇怪感觉没有什么问题!大拿提示了了聪明的小小:

你想想看啊如果客户哪天不想要这个控制台程序他想要一个winform的程序你怎么改啊?小小马上就说把Console.WriteLine("小狗跑了");换成MessageBox.Show(“…”),大拿又说如果客户又要改回来呢?小小立马就说把程序再复制一份他要哪个就调用哪个!大拿没说话,过了一会大拿说:

打个比喻 winform 底下的 Button 点击事件

 如果一个程序员想点击按钮 跳到一个网站

 另一个程序员点击按钮弹出一句话,如果微软的设计天才们都自己写,

 ButtonClick1(){}

 ButtonClick2(){}............

 那他们就是不是天才了,累死他们;

 那微软的天才怎么设计的呢?就是让我们写Button的事件方法?我们自定义!!

聪明的小小想到了,如果这个程序有1000种不同的方式呢?难道复制1000份吗?这样会造成紧耦合的局面,于是小小想到了 如果可以传递一个方法 Dog类里面 就算再多的需求,客户想要那种实现 我就做哪种实现传递给Dog就好啦。小小立马把想法告诉大拿,大拿笑着说不错,用什么可以传递方法呢?传递方法?小小突然想到了委托,脱口而出。

大拿说不错,回去设计吧。。。。

 

 

又过了一天小小高高兴兴的把设计的程序给大拿看:

 

 

 

using System;

using System.Windows.Forms;

namespace LS.KickedDogDelegate1

{

          public delegate  void DelegateKicked();

          public class Dog

          {

                      DelegateKicked delegateKicked;

                    

                     public Dog(DelegateKicked delegateKicked)

                     {

                     this.delegateKicked=delegateKicked;

                     }

                    

                     public void Kicked()

                     {

                      this.delegateKicked();

                     }

          }

          

          

          public class Test

          {

                    public static void Main()

                    {

                           Dog dog=new Dog(new DelegateKicked(FormsKicked));

                           dog.Kicked();

                    }

                   

                    public static void ConsoleKicked()

                    {

                         Console.WriteLine("小狗被踢了");

                    }

                   

                    public static void FormsKicked()

                    {

                        MessageBox.Show("小狗被踢了");

                    }           

                   

          }

        

}

 

大拿看着程序,微笑着说:“不错”,小小暗自高兴,感觉自己很聪明,“但是还是有问题,虽然设计出了小狗被踢了这个动作,但是小狗可能咬他,或者小狗跑掉了,到底是什么在踢狗之前完全是不知道的”。小小没有灰心经过两天的设计,小小终于拿出最终版本:

 

using System;

using System.Windows.Forms;

namespace LS.KickedDogDelegate2

{

          public delegate void  KickedEventHandler();

          public class Dog

          {

                     private KickedEventHandler _kicked;

                     public void AddKickedEventHandler(KickedEventHandler kicked)

                     {

                     _kicked+=kicked;

                     }

                     public void RemoveKickedEventHandler(KickedEventHandler kicked)

                     {

                     _kicked-=kicked;

                     }

                    

        public void Kicked()

                     {

                     this._kicked.Invoke();

                     }

          }

          

          

          public class Test

          {

                   public static void Main()

                   {

                        Dog dog=new Dog();

                     dog.AddKickedEventHandler(new KickedEventHandler(ConsoleKicked));

                     bool _isBite=isBite();

                     if (_isBite)

                     {

                     dog.AddKickedEventHandler(new KickedEventHandler(ConsoleBite));

                     }

                        dog.Kicked();

                   }

                  

                   public static bool isBite()

                   {

                         /*一些代码*/

                         return true;

                   }

                  

                  

                   public static void ConsoleKicked()

                   {

                        Console.WriteLine("小狗被踢了");

                   }

                  

                   public static void ConsoleBite()

                   {

                        Console.WriteLine("小狗咬你");

                   }  

                    

                           public static void ConsoleRun()

                   {

                        Console.WriteLine("小狗跑了");

                   }            

                  

                  

                   public static void WinFormKicked()

                   {

                        MessageBox.Show("小狗被踢了");

                   }

                  

          }

}

 

大拿看着小小的设计 突然说“Perfect 小小等待着他的但是,但是这次出来的不是但是,

却是:你的设计实施微软天才们设计的思想;“MY GOD 小小说。

 

大拿说:你把这段代码

                     private KickedEventHandler _kicked;

                     public void AddKickedEventHandler(KickedEventHandler kicked)

                     {

                     _kicked+=kicked;

                     }

                     public void RemoveKickedEventHandler(KickedEventHandler kicked)

                     {

                     _kicked-=kicked;

                     }

 

 

可以改成 public event KickedEventHandler _kicked; 你再运行试试;

然后再改改其他的代码;小小说好的;过了两个小时小小拿出了向客户展示的版本:

using System;

using System.Windows.Forms;

namespace LS.KickedDogDelegate3

{

          public delegate void  KickedEventHandler();

          public class Dog

          {

                   /*  private KickedEventHandler _kicked;

                     public void AddKickedEventHandler(KickedEventHandler kicked)

                     {

                     _kicked+=kicked;

                     }

                     public void RemoveKickedEventHandler(KickedEventHandler kicked)

                     {

                     _kicked-=kicked;

                     } */

                    

                     public event KickedEventHandler _kicked;

                    

        public void Kicked()

                     {

                     this._kicked.Invoke();

                     }

          }

          

          

          public class Test

          {

                   public static void Main()

                   {

                        Dog dog=new Dog();

                    // dog.AddKickedEventHandler(new KickedEventHandler(ConsoleKicked));

                     dog._kicked+=new KickedEventHandler(ConsoleKicked);

                     bool _isBite=isBite();

                     if (_isBite)

                     {

                     dog._kicked+=new KickedEventHandler(ConsoleBite);

                     }

                        dog.Kicked();

                   }

                  

                   public static bool isBite()

                   {

                         /*一些代码*/

                         return true;

                   }

                  

                  

                   public static void ConsoleKicked()

                   {

                        Console.WriteLine("小狗被踢了");

                   }

                  

                   public static void ConsoleBite()

                   {

                        Console.WriteLine("小狗咬你");

                   }  

                    

                           public static void ConsoleRun()

                   {

                        Console.WriteLine("小狗跑了");

                   }            

                  

                  

                   public static void WinFormKicked()

                   {

                        MessageBox.Show("小狗被踢了");

                   }

                  

          }

}

 

小小设计的程序受到了客户的好评,而且需求不断在变的同时,小小却没有加班,设计的合理,稳定,老板怕小小被别的公司挖走了,正考虑加工资呢。。。。。。。。。小小深感这是大拿帮助他的。。。

                                                                  剧终。。

posted @ 2011-12-09 15:50  fox_ice  阅读(188)  评论(0)    收藏  举报