回调总结

   软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。

1 什么是回调

     回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。
 

 

 

 

2、java实现回调

    定义一个简单接口,并在该接口中声明我们要调用的方法。

假定我们希望在某个事件发生时得到通知。我们可以定义一个接口:

public interface InterestingEvent {
    public void interestingEvent ();
}

  这使得我们可以控制实现该接口的类的任何对象。因此,我们不必关心任何外部类型信息。 发出事件信号的类必须等待实现了 InterestingEvent 接口的对象,并在适当时候调用 interestingEvent() 方法。

public class EventNotifier {
    private InterestingEvent ie;
    private boolean somethingHappened;
 
    public EventNotifier(InterestingEvent event) {
         ie = event; // 保存事件对象以备后用。
         somethingHappened = false; // 还没有要报告的事件。
    }
 
    public void doWork() {
         if (somethingHappened) { // 检查设置的谓词。
           ie.interestingEvent();// 通过调用接口的这个方法发出事件信号。
         }
    }
   
    public void setHappened(){//设置谓词。
         somethingHappened=true;
    }
}

  在上例中,使用 somethingHappened 谓词来跟踪是否应触发事件。希望接收事件通知的代码必须实现 InterestingEvent 接口,并将自身引用传递给事件通知程序。

public class CallMe implements InterestingEvent {
    @SuppressWarnings("unused")
    private EventNotifier en;
 
    public CallMe() {
         // 注意 EventNotifier (InterestingEvent event),应该传递一个接口类型。
         // 而下面将this,即实现了InterestingEvent接口的CallMe实例传递给
//EventNotifier。也就是所谓的接口回调了。
         en = new EventNotifier(this); // 创建事件通知程序,并将自身引用传递给它。
    }
 
    // 为事件定义实际的处理程序。
    public void interestingEvent() {
              System.out.println("Call me Hello.");
    }
}

  下面写个测试类。


public class Test {
    public static void main(String[] args) {
         EventNotifier en=new EventNotifier(new CallMe());
         en.setHappened();
         en.doWork();
    }
}
 
3、回调机制:
1.系统承诺发生什么事件时会执行什么接口的什么方法.
2.由对事件有兴趣的对象预先实现一个符合接口的具体行 为.注册到事件管理系统中,这样系统就有了一个指向这个接口的引用.
3.系统运行时由事件管理系统在事件发生时执行预定义的实现.

4、hibernate中的回调

hibernateTemplate.execute(new HibernateCallback(){
public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
                  /**
                   **实现hibernatecCallBack接口的类的,覆盖doInHibernate方法
                  **/
    }
});
  当hibernateTemplate调用execute方法时,会接收一个实现了HibernateCallBack接口的对象。并调用该对象的doInHibernate方法
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值