Callback模式和Template模式
http://byyouside.blogbus.com/logs/5504641.html
Template method被广泛的使用,像Servlet就是使用这个模式。Template mothod模式虽然能简化很多重复的代码,但这种模式的也有不少限制。Template mothod将一个功能的实现分成许多小的步骤,在父类中定义了这些步骤的顺序,让子类来具体实现每一个小的步骤。这些小的步骤是protected,以 防止用户不正确的使用这些小的步骤而产生异常。这样就产生了一个限制,那就是你需要继承Template然后重新实现具体的小步骤。如果这个 Template有许多方法,就像JdbcTemplate,如果你每次继承这个庞大的类,然后只是重写某个小步骤中来订制你自己的功能,就会显得非常笨 重,更何况数据库操作使用的如此频繁,难道你每进行一个操作就通过继承订制一个,显然不可能这么做。
不完全采用Template的模式是因为Template很庞大,有许多方法,继承它的话划不来:显得笨重。
Spring使用Callback模式与之配合,达到了去掉重复代码的效果,同时增加了很大的灵活性,你只需要实现某些CallBack就可轻松订制出Template。
那 么什么时候才是Callback模式与Template模式结合的最佳时机呢?显然如果每个具体的步骤都需要真正去具体实现而不是简单的改变参数或设置某 个对象就ok的话,使用Callback很难去订制,因为你可能需要传递多个Callback作为参数,并让用户去实现,使用Java的内部类本来就是一 个比较丑陋的语法,更何况参数是多个。这相当于你把每个小步骤封装成为接口,然后分别继承之然后实现。显然没有达到方便灵活的效果,这时候直接使用 Template method模式就比结合Callback要好。而如果用户只需要定制一个方法能就达到用户的要求,或者更简单,只是设置不同的参数,那么使用 Callback就具有很好的灵活性。
使用Template-Callback模式的时机:用户只需要定制一两个方法就能达到要求或只需要设置不同的参数。
-----------------Template-Callback模式在Spring中的实现步骤:
1. 创建一个Template对象: jdbcTemplate = new JdbcTemplate(dataSource);
2. 该Template有个execute方法,里面含有需要你传递进来的参数(参数声明可能是接口,也可能是具体类).该方法已经实现了你需要的达到目的的步骤,以及会返回你所需要的东西。你所要做的就是实现该方法所需要的参数。
3. 创建参数并调用Template方法。你可能需要实现接口来创建Template方法所需要的参数(可能采取内部类的形式)。
该模式如何体现了CallBack????
软 件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才 返回, 它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方 向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实 现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础。
回调就是自己定义的函数但由系统来调用。
转载于:https://www.cnblogs.com/heyutao/archive/2009/06/12/1501852.html
Callback模式和Template模式相关推荐
- Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式
Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...
- java 模板模式_Java模板模式(Template模式)
Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- Java设计模式(8)组合模式(Composite模式)
Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
- 设计模式【14】——策略模式( Strategy 模式)
文章目录 前言 一.策略模式( Strategy 模式) 二.具体源码 1.Strategy.h 2.Strategy.cpp 3.Context.h 4.Context.cpp 5.main.cpp ...
- C++设计模式 之 “组件协作”模式:Template Method、Strategy、Observer
"组件协作"模式: #现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与应用程序之间的松 ...
- 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)
23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...
最新文章
- 几个基于jvm 的微服务框架
- java comparator 降序排序_【转】java comparator 升序、降序、倒序从源码角度理解
- radware Alten系列的HA配置
- arcgis 字段计算器 条件赋值_【教程】ArcGIS入门教程(11)——多条件购房分析...
- 时间序列:简易prophet
- mysql hicharts_PHP怎么调用Mysql的数据给Highcharts
- 最优乘车(Floyd)
- 谷歌五笔输入法电脑版_“五笔输入法”打字速度更快,为什么却没啥人用?
- java掌握_掌握Java 11的Constantdynamic
- 百度SDN实践与思考
- freeRADIUS下EAP测试
- 新浪微博客户端(26)-添加转发评论工具条
- Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT)
- 28. magento使用细节
- milantgh php安全,PHP漏洞全解(一)-PHP网站的安全性问题
- 引言:扇贝 2017 服务端技术回顾
- RGB、HSL、Hex网页色彩码,看完这篇全懂了
- HOG特征提取(一)
- 关于癌症的思考:癌症的本质是什么
- 千古奇才---埃舍尔
热门文章
- python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...
- python通信原理_用python通过原始套接字发送scapy包
- keras padding_GAN整体思路以及使用Keras搭建DCGAN
- ElasticSearch多shard场景相关度打分不准确问题
- (117)FPGA面试题-使用三态缓冲器实现漏极开路缓冲
- (2)verilog语言编写打两拍
- Interlocked原子访问系列函数
- 信号signal()、alarm()、信号集函数、sigprocmask()
- MFC中Combo 下来菜单不能展开(只显示一点点)
- 1017.UML类图笔记