重温设计模式.委托和事件

最近搞个小软件,重构了几次,越来越精简,但还是不能够满足自己的要求。分析下来,主要是没有设计过程,头脑想到了就做。
以前看过一遍“大话设计模式”,看的时候前面的还能理解,后面的就不好理解,主要是没有经验,以前看的时候也没有动手写代码。为了对一些常用的设计模式有点了解,也更便于日常的编码工作,所以决定重温设计模式,并一个个敲代码,可能也只搞些基本的模式,看完后,扔开书本敲代码。
声明,本人不是专业程序员,业余写程序而已。所以表述不专业,代码有错误,请谅解。欢迎提意见和交流。
由于以前只了解委托,事件也是在WinForm里面编程用到,自己并没有单独写过,个人认为委托和事件是比较重要,也是面向对象基础概念中比较难理解的一个。
所以第一次先温习下这个,并彻底搞清楚。
View Code
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace DesignPattern
 7 {
 8     /// <summary>
 9     /// 委托与事件学习-参考大话设计模式中的猫和老鼠的例子:
10     /// 1个猫 Tom,2只老鼠 Jerry和Jack,只要Tom喊一声,老鼠就会喊 快跑,猫来了
11     /// </summary>
12     public class DelegateExample
13     {
14         static void Main(string[] args)
15         {
16             Cat cat = new Cat("Tom");
17 
18             Mouse mouseJerry = new Mouse("Jerry");
19             Mouse mouseJack = new Mouse("Jack");
20          
21             cat.CatShout += new Cat.CatEventHander(mouseJack.Run);
22             cat.CatShout += new Cat.CatEventHander(mouseJerry.Run);
23             cat.Shout();
24             Console.Read();
25         }
26     }
27         
28     public class Cat
29     {
30         /// <summary>
31         /// 猫的名称
32         /// </summary>
33         public string Name { getset; }
34 
35         public Cat(string name)
36         {
37             this.Name = name;
38         }
39         /// <summary>
40         /// 猫说话
41         /// </summary>
42         public void Shout()
43         {
44             Console.WriteLine("Hi ,我是{0}",Name );
45             //如果事件中有对象,则执行
46             if (CatShout != null) CatShout();
47         }
48         /// <summary>
49         /// 声明一个"猫叫"的委托
50         /// </summary>
51         public delegate void CatEventHander();
52         /// <summary>
53         /// 声明一个猫叫的事件
54         /// </summary>
55         public event CatEventHander CatShout;
56     }
57     public class Mouse
58     {
59          /// <summary>
60         /// 老鼠的名称
61         /// </summary>
62         public string Name { getset; }
63 
64         public Mouse(string name)
65         {
66             this.Name = name;
67         }
68         /// <summary>
69         /// 老鼠跑的方法(猫来的时候,老鼠就跑)
70         /// </summary>
71         public void Run()
72         {
73             Console.WriteLine("Hi,我是{0},快跑,猫来了....",Name );
74         }
75     }
76 }
备注,上述例子来源于“大话设计模式”最后的面向对象基础。

本博客还有大量的.NET开源技术文章,您可能感兴趣: 

1.开源Math.NET基础数学类库使用系列文章链接

2.开源C#彩票数据资料库系列文章链接

3.开源的.NET平台ORM组件文章:链接

4.其他开源的.NET组件文章:链接

5..NET平台机器学习组件-Infer.NET系列文章:链接

6.Matlab混合编程文章:链接 

posted @ 2011-12-02 16:10  数据之巅  阅读(823)  评论(0编辑  收藏  举报