`
aiwori
  • 浏览: 9286 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

有一种设计模式叫回调

 
阅读更多

一、回调是一种常见的程序设计模式。在这种模式中,可以指出某个特定事件发生时应该采取的动作。例如,可以指出在按下鼠标或选择某个菜单项时应该采取什么行动。
1.在C#中,我们会定义一个委托用来传递回调函数,请看下面代码,在A类里面调用B类的ShowAssociateRuleView的方法时传递了一个匿名委托(即回调函数),
在ShowAssociateRuleView方法中触发了传过来的onComplete,即回调了A传过来的匿名委托。
Class A
{
/// <summary>
/// 查看二级关联授权情况
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">RoutedEventArgs</param>
private void btnSeeSencondAssociate_Click(object sender, RoutedEventArgs e)
{
B bclass=new B();
//这里调用B类的ShowAssociateRuleView方法,并将匿名委托作为参数传过去
bclass.ShowAssociateRuleView(delegate
{
DataCenterSwitchService.Instance.RevertContext();
});
}
}

Class B
{
/// <summary>
/// 弹出“一二级关联设置”自定义分组规则界面.
/// </summary>
/// <param name="onComplete">onComplete</param>
public void ShowAssociateRuleView(Action onComplete)
{
Dialogs.ShowModelDialog(
this,
"查看关联情况",
delegate(object sender, WindowClosedEventArgs e)
{
//这里触发回调方法
if (onComplete != null)
{
onComplete();
}
},
null,
new Size(950, 600));
}
}

2.在java中如何实现回调呢?在java中可以利用接口来传递回调方法,其实有时候我们可以把C#中的委托比作只有一个方法的接口。
举例:上级经理张三分配开发任务给李四,李四写完代码后要通知上级代码检查。显然,张三不一定要一直看着李四直到代码写完,在李四写代码的过程中可以干其他事情。
代码如下:
先约定一个接口
public interface ICallBack {
void execute();
}

上级张三类:
public class Zhangsan {
private void CallLisi() throws InterruptedException {
Lisi lisi=new Lisi();
//上级张三下发任务给李四
//这里传递了一个实现了ICallBack接口的匿名类给Lisi类的coding方法
lisi.coding(new ICallBack() {
@Override
public void execute() {
System.out.println("张三正在检查李四的代码。。");
}
});
}
}

下级李四类:
public class Lisi {
//接收任务
public void coding(ICallBack onComplete) throws InterruptedException {
System.out.println("李四正在写代码。。。");
Thread.sleep(5000);
System.out.println("李四写完代码了。。。");
//这里回调,通知老大张三
onComplete.execute();
}
}


二、延伸
1.上例中如果存在王五类(配置部人员),代码如下:
public class Wangwu {
//李四写完代码后配置部王五要合并代码
private void CallLisi() throws InterruptedException {
Lisi lisi=new Lisi();
lisi.coding(new ICallBack() {
@Override
public void execute() {
System.out.println("配置部王五在合并李四写的代码。。");
}
});
}
}

这里Zhangsan类和Wangwu类在李四写完代码后干的活儿都不同,那么我们就可以写两个实现了ICallBack接口的类传给Lisi.coding方法,是不是符合了分离变化点的原则。
在用Java写JDBC代码的时候,通常我们会把作映射的一部分抽取出来,由调用方去实现,这就分离了变化点。如下代码,通常我们的变化部分就在做实体映射部分,我们就需要提取一个接口
由调用方来实现。

public List<User> query() {

List<User> userList = new ArrayList<User>();
String sql = "select * from User";

Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
con = HsqldbUtil.getConnection();
pst = con.prepareStatement(sql);
rs = pst.executeQuery();

User user = null;
while (rs.next()) {

user = new User();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("user_name"));
user.setBirth(rs.getDate("birth"));
user.setCreateDate(rs.getDate("create_date"));
userList.add(user);
}


} catch (SQLException e) {
e.printStackTrace();
}finally{
//关闭数据库连接部分。。。。。
}
return userList;
}

2.在上面的例子中用到了匿名类,格式如new ICallBack(){} 或new 抽象类如new MouseAdapter(){},通常在不需要重用并且代码行数很少情况下,可以使用匿名类方式。


个人拙见,请勿拍砖,指正点评即可,o(∩_∩)o...

分享到:
评论

相关推荐

    构建者模式、回调和观察者设计模式

    构建者模式、回调和观察者设计模式是软件开发中常用的设计模式,它们分别在不同的场景下发挥着重要的作用。下面将详细介绍这三个设计模式,并通过一个简单的例子来展示它们的应用。 首先,构建者模式(Builder ...

    企业号回调模式

    在企业级应用开发中,回调模式是一种常见的设计模式,它在异步操作或者分布式系统中发挥着关键作用。回调模式允许程序在特定事件发生时执行一段代码,而不是等待该事件完成后再进行下一步操作。这种模式在处理网络...

    两个设计模式与一个线程回调

    "两个设计模式与一个线程回调"这个主题涵盖了面向对象编程中的一些核心概念,包括设计模式的运用以及多线程环境下的回调机制。下面我们将详细探讨这两个设计模式和线程回调的概念。 首先,我们来看两个设计模式: ...

    【转】Spring中模板模式和回调模式的讲解

    模板模式是一种行为设计模式,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。在Spring中,例如`JdbcTemplate`就是模板模式...

    人人都懂设计模式 人人都懂设计模式

    在“进阶篇”中,作者讲解了设计模式在实际开发中的应用,包括过滤器模式、对象池技术、回调机制和 MVC 模式等。在“经验篇”中,作者分享了自己在设计模式和软件开发方面的经验和看法,包括设计原则、项目重构等。 ...

    C#回调函数

    在C#编程中,回调函数是一种非常重要的设计模式,它允许我们传递一个方法作为参数到另一个方法中,以便在特定事件发生或者特定条件满足时执行。这种机制使得代码具有高度的灵活性和可扩展性,特别是在处理异步操作、...

    java 回调函数 实现

    在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象执行特定操作后接收通知或进行处理。这种机制通常用于事件驱动编程或者异步编程中,使得代码能够响应某些特定事件的发生。在给定的场景中,我们...

    Android监听——回调模式与观察者模式

    回调模式是一种设计模式,其中,一个方法A在执行过程中会调用另一个方法B,而方法B则负责处理A方法中的某些特定事件或结果。在Android中,回调模式主要体现在Activity、Fragment等组件的方法中,如onCreate(), ...

    C#回调函数示例

    在编程领域,回调函数是一种非常重要的设计模式,它允许我们将一个方法作为参数传递给另一个方法,在特定条件下由被调用的方法执行。在C#中,回调函数同样被广泛使用,尤其是在异步编程、事件处理和自定义算法中。本...

    使用C语言写的回调函数

    回调函数是一种设计模式,它使得调用者能够将一个函数作为参数传递给其他函数,由被调用者在执行完某些操作后或者在特定事件发生时,调用这个传递的函数。这种方式增强了程序的灵活性,因为调用的时机和方式由被调用...

    第一个回调工程

    在IT行业中,回调是一种常见的编程概念,特别是在C++这样的语言中。回调机制允许我们传递一个函数作为参数到另一个函数中,然后在特定条件满足时,被传递的函数会被调用执行。这种设计模式广泛应用于异步编程、事件...

    59丨模板模式(下):模板模式与Callback回调函数有何区别和联系?1

    模板模式是一种行为设计模式,它定义了一组操作的算法骨架,同时允许子类在某些步骤中替换具体行为。而回调则是通过将一个函数作为参数传递给另一个函数,使得被调用的函数可以在适当的时候调用这个传入的函数。 ...

    模版模式和回调模式

    模版模式和回调模式是软件设计模式中的两种重要策略,它们在不同的场景下能有效解决代码复用和异步处理的问题。本文将深入探讨这两种模式的原理、应用场景以及它们之间的区别。 **模版模式(Template Method ...

    C# 实现回调函数

    回调函数在编程中是一种强大的设计模式,特别是在C#这样的面向对象语言中,它允许你在方法执行完毕后调用另一个特定的函数。回调函数通常用于异步编程,事件处理或者作为参数传递,使得代码更加灵活和可扩展。接下来...

    给初学者的java回调demo

    Java回调是一种设计模式,它是当一个对象调用另一个对象的方法时,被调用对象通过某种方式在完成操作后反过来调用调用者的方法,这种机制就是回调。在Java中,回调通常通过接口或者抽象类来实现。这篇"给初学者的...

    方法回调模式

    在软件工程中,**回调**是一种常见的编程模式,它允许程序的某部分代码指定一个方法,然后由其他部分的代码在适当的时机调用这个方法。简单来说,即一个对象A调用另一个对象B中的某个方法后,对象B会在某个时刻调用...

    iOS块回调代替代理模式演示

    在iOS开发中,代理模式是一种常见的设计模式,用于对象间通信。然而,随着Apple引入了 blocks(块)这一特性,开发者有了另一种选择——使用块回调来替代传统的代理模式。块回调提供了一种更加简洁、直观的方式来...

    websocket 实现实时推送的例子(工厂模式,回调机制)

    工厂模式是一种设计模式,它是创建型模式的一种,主要用来解决对象创建过程中的复杂性和多变性。在WebSocket的例子中,我们可以创建一个WebSocket工厂,这个工厂负责创建WebSocket连接对象。这样做的好处在于,当...

    Android回调函数的例子

    在编程领域,回调函数是一种设计模式,它允许我们定义一个函数,这个函数可以在另一个函数执行完毕后被调用。在Android开发中,回调函数扮演着至关重要的角色,尤其是在处理异步操作、事件监听以及用户交互时。本...

    嵌入式程序设计回调函数模型

    在移植UCGUI到不同的嵌入式平台上时,回调函数模型是关键的设计模式,因为它允许在运行时动态响应事件,而无需中断主任务或创建复杂的同步机制。 回调函数是一种将函数作为参数传递给其他函数的机制。在这种情况下...

Global site tag (gtag.js) - Google Analytics