C#委托
委托练习
请用Observe模式写出以下代码: 模拟水壶烧水的情况,当水的温度发出“嘟嘟”的声音。
看到这道题时,感觉他就是我们平时的例子,其实生活处处皆学问就看你有没有留心了。当看到题时,先想一下需要创建的对象:1、 水壶 2、 警报器
首先要先考虑一点:既然是委托,那究竟谁是委托方?谁是监视方?发布委托的又是谁,谁来执行这个动作?理清好这个思路其实就不难了。
其实发布委托者就是就是委托者也是被监视方,而接受委托方就是监视方也是,这个动作也是有监视方来执行的,但是,还要由发布者来发布这个命令才行。
问题搞清楚了代码就很清晰了....思路清晰了,那我们开始代码分析....
第一步:定义一个委托类...
public delegate void DelEbullition(); //定义一个沸腾的委托
第二步:定义一个发布委托类水...
public class Water
{} /*发布委托方, 被监视方*/
第三步:对一个接受委托方的警报器类..
public class Alarm //定义一个警报器类
{}
下面我们来看一下参考代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public delegate void DelEbullition(); //定义一个沸腾的委托 2 public class studyDelegate 3 { 4 public static void Main() 5 { 6 Water w = new Water(); 7 Alarm a = new Alarm(); 8 //发布一个水沸腾的委托 9 w.ds = a.DDEbullition; 10 //发布一个谁没沸腾的委托 11 w.dn = a.DBEbullition; //在传递的时候方法不能传递() 12 //开始执行 13 w.Ebullition(); 14 15 } 16 } 17 /*发布委托方, 18 被监视方*/ 19 public class Water 20 { 21 public DelEbullition ds= null; //发布一个沸腾时的委托 22 public DelEbullition dn = null;//发布一个不沸腾时的委托 23 public void Ebullition() 24 { 25 for(int i = 0;i<=100;i++) 26 { 27 if(i < 90) 28 { 29 db(); 30 }else 31 { 32 de(); 33 } 34 } 35 } 36 } 37 /*接受委托方 38 监视方*/ 39 public class Alarm //定义一个警报器类 40 { 41 public void DDEbullition() 42 { 43 Console.WriteLine("水烧开了,嘟嘟!"); 44 } 45 public void DBEbullition() 46 { 47 Console.WriteLine("谁还没烧开,请等一会..."); 48 } 49 }