首页 > 其他 > 详细

从警察抓小偷看委托

时间:2015-11-01 10:11:05      阅读:218      评论:0      收藏:0      [点我收藏+]

  前言:我的类名,方法名都是汉字,大家不要学我,因为这是不规范的。。。。。。

 

  警察类: 

 1 namespace 警察抓小偷
 2 {
 3     class 警察
 4     {
 5         private string name;
 6         private string color;
 7 
 8         public 警察(string name,string color)
 9         {
10             this.name = name;
11             this.color = color;
12         }
13 
14         public void 警察来了(小偷 sef1,小偷 sef2)
15         {
16             Console.WriteLine(color+"的警察"+name+"来了");
17 
18             sef1.小偷快跑();
19             sef2.小偷快跑();
20         }
21 
22     }
23 }

  小偷类:

  

 1 namespace 警察抓小偷
 2 {
 3     class 小偷
 4     {
 5         private string name;
 6         private string color;
 7 
 8         public 小偷(string name, string color)
 9         {
10             this.name = name;
11             this.color = color;
12         }
13 
14         public void 小偷快跑()
15         {
16             Console.WriteLine(color+"的小偷"+name+"说:警察来了,快跑,我使劲的快跑");
17         }
18     }
19 }

  控制台代码: 

 1 namespace 警察抓小偷
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             警察 polic = new 警察("黑猫警长","黑色");
 8 
 9             小偷 sef1 = new 小偷("大宝","白色");
10             小偷 sef2 = new 小偷("小宝","蓝色");
11             polic.警察来了(sef1,sef2);
12             Console.ReadLine();
13         }
14     }
15 }

  结果图:

  技术分享

 

  很好,这功能可以实现,警察叔叔来了之后呢,小偷先生会马上逃跑。但是,大家注意到了吗?如果再来一个小偷先生“三宝”怎么办呢?是不是要在警察类的警察来了方法中再添加一个参数然后方法体里面再调用一次,如果大家认为这没什么的话我只能说:你真可爱。

  现在来说说这个方法的缺点:扩展性特别差,多来几个小偷的话就要在警察类改来改去的直到你焦头烂额。那么怎么改进呢?用委托。

  小偷类就不需要改了,咱们来看警察类:

 1 namespace 警察抓小偷
 2 {
 3     class 警察
 4     {
 5         private string name;
 6         private string color;
 7 
 8         public 警察(string name,string color)
 9         {
10             this.name = name;
11             this.color = color;
12         }
13 
14         public void 警察来了()
15         {
16             Console.WriteLine(color+"的警察"+name+"来了");
17             if (vae!=null)
18             {
19                 vae();
20             }
21          
22         }
23         public Action vae;
24     }
25 }

  再来看看控制台代码:

 1 namespace 警察抓小偷
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             警察 polic = new 警察("黑猫警长","黑色");
 8 
 9             小偷 sef1 = new 小偷("大宝","白色");
10             小偷 sef2 = new 小偷("小宝","蓝色");
11             polic.vae += sef1.小偷快跑;
12             polic.vae += sef2.小偷快跑;
13             polic.警察来了();
14             Console.ReadLine();
15         }
16     }
17 }

  结果图就不看了吧,和上面的是一样的。

  使用这个委托相对于上面的方法有什么好处呢?

  第一:我的警察类只要写完就可以不动它了,就让它安安静静的做个美男子吧。

  第二:小偷先生什么时候加入了新成员,我只需要在控制台里面把这个新成员加到委托机制里面就好。

 

从警察抓小偷看委托

原文:http://www.cnblogs.com/yunquan/p/4927283.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!