一个馒头引发的回调(委托或代理)

25 篇文章 0 订阅
11 篇文章 0 订阅

作者PeterXu  来源:Blog.CSDN  Blog: http://blog.csdn.net/peterreg/
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明,否则将追究法律责任。本文地址:http://blog.csdn.net/peterreg/archive/2008/04.aspx
 

一个凉馒头需要加热后食用,一般的加热步骤为(以微波炉为例):
1.   打开微波炉的门,放进馒头,关上微波炉的门;
2.   设定加热等级和加热时间,微波炉开始工作;
3.   设定时间到达后,微波炉以声音提示我们,加热过程结束,可以从中取出食用。

假设人和微波炉是软件中的两个模块,这两个模块间的交互有哪几种方式?
1.   人其它的事都不干,就一直看着微波炉,只到馒头热了拿出来;
2.   人可以干其它的事,但在一定的时间间隔后,过来看一下微波炉,看看加热是否结束。如加热结束则取出馒头,如加热未结束,则过一定的时间间隔后再来看,只到加热结束;
3.   人让微波炉工作后,就不用管它了,去干其它的事(比如说看电视、写BLOG。。。。我就是这样的。。哈哈)。微波炉加热工作结束后,以一定的方式通知人,使人知道它的状态改变了(工作变为待机)。

从软件模块间的调用方式上来分析:
1.  第一种是同步调用,即阻塞式调用,调用方必须等待被调用方执行完毕后再进行其它工作;
2.  第二种是轮询方式,调用方定期查看被调用方的状态,从而判断是否进行其它的任务。从效率上比第一种方式要高一些,但如果轮询的数量较多时,也影响系统的效率;
3.  第三种是回调模式,即异步调用的一种,调用方发任务给被调用方以后,转而执行其它的任务,被调用方在执行完成后,以一定的方式通知调用方。

在C++中的回调通过函数指针来实现,作为回调的函数必须为全局函数或静态函数;
在C#中采用代理(委托)来实现回调,一般的成员函数即可以实现回调。

部分代码如下:

public   class  MicroWaveOven
{
         
public delegate void DataHandle();
         
public event DataHandle HeatingEnd = null;

         
public MicroWaveOven()
         
{
         }


         
public void Heating()
         
{
                 ........
                 ........
                  
// 加热的相关代码
                 if(this.HeatingEnd != null)
                 
{
                        
this.HeatingEnd();
                 }

         }

}



public   class  Person
{
        
public  Person()
        
{
        }


        
public void HeatingBread()     // 加热馒头
        {
                 MicroWaveOven mwo 
= new MicroWaveOven();
                 mwo.HeatingEnd 
+= new MicroWaveOven .DataHandle(mwo_HeatingEnd);
                 mwo.Heating();
        }


        
private void mwo_HeatingEnd()  // 此函数作为参数传给对角mwo(类似于函数指针)
        {
                 MessageBox.Show(
"馒头加热好了。。。。")
                 
// 此处可加上其它的处理代码
        }

}

通过上面简单的代码,我们可以得出,采用异步回调的模式,可以使我们处理某些事件时变得非常方便。而在一些特殊场合下,必有采用回调模式才能解决。
Window事件就是一种特殊的委托,在WINDOW消息机制中,通过我们实现了上层的委托,从而是上层的代码能够融入到整个事件的处理程序当中,实现相关的功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值