`
mmdev
  • 浏览: 13324062 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

模板方法设计模式

 
阅读更多

1.什么是回调函数

所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。一般说来,C不会自己调用BC提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。WebService以及JavaRMI都用到回调机制,可以访问远程服务器程序。回调函数包含下面几个特性:

1、属于工作流的一个部分;

2、必须按照工作流指定的调用约定来申明(定义);

3、他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;

2.回调机制

回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。

java回调机制:

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;

回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;

异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。

回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。

实例

1、回调类接口

/**

*回调类接口

*

*/

publicinterfaceCallBack{

publicStringfindCallBack();

}

2、调用者

/**

*调用者

*

*/

publicclassAnotherFunction{

CallBackfindCallBack;

//调用实现类方法

publicStringdoCallback(){

returnfindCallBack.findCallBack();

}

/*业务需要的时候,通过委派,来调用实现类的具体方法*/

publicvoidsetCallback(CallBackfindCallBack){

this.findCallBack=findCallBack;

}

}

3、测试回调函数

/**

*newCallBack给调用者anotherFunction对象传递了一个实现CallBack接口的匿名类,

*这样AnotherFunction类的对象就取得了一个实现接口的类,可以在任何时候调用接口中的方法

*/

publicclassCallMainTest{

publicstaticvoidmain(String[]args){

//创建调用者实现类

AnotherFunctionanotherFunction=newAnotherFunction();

//将回调类接口注册进实现类中

anotherFunction.setCallback(newCallBack(){

@Override

publicStringfindCallBack(){

return"在CallMainTest类中实现但不能被CallMainTest的对象引用,而由AnotherFunction对象调用";

}

});

//接收回调函数返回的信息

Stringinfo=anotherFunction.doCallback();

//打印输出

System.out.println(info);

}

}

上述的代码:

1.两个类:匿名类和AnotherFunction

2.匿名类实现接口CallBack(CallMainTest测试的main方法中用匿名类的形式实现)

3.AnotherFunction拥有一个参数为CallBack接口类型的函数setCallback(CallBackfindCallBack)

4.匿名类运行时调用AnotherFunction中setCallBack函数,以自身传入参数

5.AnotherFunction已取得匿名类,就可以随时回调匿名类中所实现的CallBack接口中的方法

回调方法的使用通常发生在“java接口抽象类的使用过程中。模板方法设计模式就使用方法回调的机制,该模式首先定义特定的步骤的算法骨架,而将一些步骤延迟到子类中去实现的设计模式。模板方法设计模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

模板方法设计模式适用性:

1、一次性实现一个算法的不变部分,并将可变的算法留给子类来实现。

2、各子类中公共的行为应该被提取出来并集中一个公共父类中以避免代码重复。

3、可以控制子类扩展。

设计实例:

1.AbstractClass

定义抽象的原语操作,具体的子类将重定义它们以实现一个算法的各步骤。

实现一个模板方法,定义一个算法骨架。

该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。

/**

*抽象模板方法类

*

*/

publicabstractclassCallBackAbstract{

//需要到子类中实现的方法

publicabstractvoidprint();

//模板方法

publicvoidupdate(){

System.out.println("模板中的方法");

for(inti=0;i<3;i++){

print();

}

}

}

2.ConcreteClass

实现原语操作以完成算法中与特定子类相关的步骤。

/**

*具体子类实现继承模板方法类

*

*/

publicclassCallBackConcreteextendsCallBackAbstract{

@Override

publicvoidprint(){

System.out.println("子类中具体实现的方法被调用");

}

}

3.测试类

publicclassCallTemplateMainTest{

publicstaticvoidmain(String[]args){

CallBackConcretecbc=newCallBackConcrete();

//调用子类中实现的具体方法

cbc.print();

//调用模板方法中的实现方法

cbc.update();

}

}

4.输出结果:

子类中具体实现的方法被调用

模板中的方法

子类中具体实现的方法被调用

子类中具体实现的方法被调用

子类中具体实现的方法被调用


分享到:
评论

相关推荐

    模板方法设计模式1

    模板方法设计模式是一种在面向对象设计中非常常用的设计模式,它的主要目的是为了封装算法或操作流程的固定部分,同时允许子类对其中某些特定步骤进行定制。这种模式遵循开闭原则,即对扩展开放,对修改关闭,允许...

    第05章 面向对象(下) 10 抽象类应用之模板方法设计模式

    面向对象编程是软件开发中的核心思想之一,而模板方法设计模式是这种思想在实践中的一种具体应用。本章我们将深入探讨“模板方法设计模式”,并结合Java语言进行详细讲解。 模板方法设计模式是一种行为设计模式,它...

    Java模板方法设计模式[定义].pdf

    Java 模板方法设计模式定义 Java 模板方法设计模式是指在软件开发过程中,通过定义一个通用的算法结构,然后将具体的实现细节交给子类来完成的设计模式。该模式的核心思想是,通过回调函数来实现算法的可扩展性和...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...

    设计模式之模板方法模式

    设计模式之模板方法模式,这份文档以例子的形式介绍了模板方法模式

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    设计模式的模板方法模式的例子

    模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...

    设计模式之模板方法(Template)

    模板方法设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式的主要目的是定义一个操作的框架,允许子类在不改变整体结构的情况下重定义具体步骤。这有助于保持代码的整洁,实现代码复用,并...

    设计模式之模板方法测试代码

    模板方法设计模式是行为设计模式的一种,它定义了算法的骨架,允许在子类中定义算法的某些步骤。在这个场景下,"设计模式之模板方法测试代码"指的是一个用于验证模板方法模式实现的C++代码示例。 模板方法模式的...

    设计模式教程-模版方法

    模板方法设计模式是一种在面向对象设计中常用的行为型设计模式,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这种模式允许子类在不改变算法整体结构的情况下,重定义某些特定步骤。 在软件开发中,模板...

    模板方法设计

    模板方法设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色,尤其是在代码复用和保持结构一致性方面。这种模式定义了操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个...

    C++设计模式课件3_Template Method_模板方法.pdf

    ### C++设计模式课件3_Template Method_模板方法 #### 模板方法设计模式解析 模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式...

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    深入浅出设计模式之模板方法模式

    ### 深入浅出设计模式之模板方法模式 #### 一、模板方法模式概述 设计模式是软件工程中一种非常重要的技术手段,它能够帮助我们解决常见的编程问题,并提高代码的可重用性、可扩展性和可维护性。模板方法模式是一...

    js如何实现设计模式中的模板方法

    模板方法设计模式是一种行为设计模式,它允许我们在父类中定义一个算法的骨架,而将一些步骤延迟到子类中。这种模式使得子类可以在不改变算法结构的情况下,重写特定的步骤。 在JavaScript中实现模板方法,主要利用...

    设计模式模方法模式PPT学习教案.pptx

    《模板方法设计模式详解》 模板方法设计模式是面向对象设计模式中的一种行为模式,它允许在父类中定义一个算法的框架,而将一些步骤的实现延迟到子类中。这种模式通常用于代码复用,特别是在有多个相似类,但它们在...

    设计模式(十一)之模板方法模式.zip

    模板方法模式是面向对象设计中的一种行为设计模式,它在软件工程中扮演着重要的角色,尤其是在需要维护代码的可扩展性和可复用性时。这个模式的核心思想是封装不变的部分,将可变部分抽象出来,让子类进行扩展。通过...

    策略模式结合模板方法模式

    策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...

Global site tag (gtag.js) - Google Analytics