`

模版模式和回调模式

阅读更多

原创内容,转载请注明出处

1、模版模式

模版模式,顾名思义,是指将一些通用的行为实现都已完成,然后一些可变的行为交由我们来实现完成。在实际生活中有很多这样的例子,比如填写合同协议或者其他文件,文件上已经有通用的信息,我们只需要填写我们的个人信息并且签名即可,该文件就是一个模版。

UML类图表示


 创建父类SuperClass

package com.test.designermodel.templatemodel;

public abstract class SuperClass {

	public void process(){
		System.out.println("通用方法实现开始");
		excute();
		System.out.println("通用方法实现结束");
	}
	
	protected abstract void excute();
}

 创建子类实现类ConcreteClass

 

package com.test.designermodel.templatemodel;

public class ConcreteClass extends SuperClass {

	@Override
	protected void excute() {
		System.out.println("---执行处理---");
	}

}

 编写Junit测试代码

	/**
	 * Java模版模式
	 */
	@Test
	public void testTemplateModel(){
		ConcreteClass concreteClass = new ConcreteClass();
		concreteClass.process();
	}

 测试结果如下

 
 

2、回调模式

回调模式在Spring中有大量应用,比如Spring 的DaoSupport系列类,都使用了模版和回调模式组合。

上述例子可以这样实现,将execute方法抽出来,做成一个接口。

UML类图表示

 

 

 创建Supportclass类

package com.test.designermodel.templatemodel.callback;

public class SupportClass {

	public void process(CallBack callBack){
		System.out.println("通用方法实现开始");
		callBack.excute();
		System.out.println("通用方法实现结束");
	}
}

 创建回调接口CallBack类

package com.test.designermodel.templatemodel.callback;

public interface CallBack {

	public void excute();
}

 创建Junit测试代码

	/**
	 * Java模版模式和回调模式
	 */
	@Test
	public void testTemplateModelAndCallback(){
		new SupportClass().process(new CallBack() {
			
			public void excute() {
				System.out.println("---------回调执行处理---------");
			}
		});
	}

 测试结果如下图

 

 

源代码如附件


 

如上测试结果客户端调用SupportClass类的方法,SupportClass类之后会反过来调用客户端的Callback接口方法。

  • 大小: 2.3 KB
  • 大小: 1.3 KB
  • 大小: 1.7 KB
  • 大小: 2.3 KB
分享到:
评论

相关推荐

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

    NULL 博文链接:https://zhang23242.iteye.com/blog/1904116

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

    复用和扩展是模板模式的两大作用,实际上,还有另外一个技术概念,也能起到跟模板模式相同的作用,那就是回调(Callback)。A 类事先注册某个函数 F 到 B类

    Spring 学习 JdbcTemplate,模板模式,回调

    NULL 博文链接:https://gutou9.iteye.com/blog/286812

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

    在这种情况下,策略模式可以有三种实现方式:一是在上下文中实现公共功能,让所有具体的策略算法回调这些方法;二是把策略的接口改成抽象类,然后在里面实现具体算法的公共功能;三是给所有的策略算法定义一个抽象的...

    亲测完整微信企业号回调模式URL验证代码

    自己前段时间在做微信,刚刚开始企业号回调模式验证总是出问题,找了很多代码,结果都不行,本人现在整理了一个完整的回调模式的验证代码,只需改三个参数即可。

    Caiguangnan#ProgrammerToolBox#18.回调(模板方法模式)1

    一、回调的实现(模板方法模式)定义:设计操作的算法骨架,将某些步骤延迟到子类中实现(自定义性质很强)。//搭建骨架public final void proce

    spring模板模代码

    spring模板模代码 学习模式用 了解学习模板模式和接口回调

    浅谈C++模板实现模块间参数传递及回调

    一篇关于C++模板 设计模式 软件架构的文档,里面实现了一个泛化的命令模式和观察者模式

    PHP微信企业号开发之回调模式开启与用法示例

    本文实例讲述了PHP微信企业号开发之回调模式开启与用法。...下面我先贴出我验证成功的回调模式开启的代码 <?php //回调开启 include_once "WXBizMsgCrypt.php"; // 假设企业号在公众平台上设置的参数如下 $encodin

    利用 Spring 自动类型转换与回调模式写出优雅的代码

    当我们使用 dubbo 或者 feign 进行 RPC 调用用时,通常的调用模板方式如下: public BizResponse method(BizRequest request){ RpcRequest rpcRequest = buildRpcRequest(); RpcReponse reuslt = xxxFacade.invoke...

    demoSuccess.zip

    钩子方法-回调方法-模板模式 博客地址:https://blog.csdn.net/qq_36963950/article/details/107743105

    华美淘宝客新版卷皮模板源码飞天侠全自动采集.rar

    伪静态模式(REWRITE模式)QQ回调地址填写:http://域名/oauth-callback-mod-qq 如果你的分割号是/的话就换成http://域名/oauth/callback/mod/qq 伪静态模式(PATHINFO模式)QQ回调地址填写:http://域名/index....

    Node.js高级编程

    , 主要内容, 介绍了查询和读写文件, 研究了流、文件系统、网络和自动化单元测试, 详细描述了如何读写数据流, 从零开始构建TCP和HTTP服务器与客户端, 介绍使用数据报、测试和调试模块以及控制回调流程, 展示了如何用...

    STM32F407标准库+U8g2图形库,0.96寸OLED驱动

    U8g2库的使用需要选择合适的构造函数,初始化显示器,设置引脚号,编写回调函数和绘图指令。 U8g2图形库的优点是可以使用多种字体,支持中文显示,提供丰富的图形程序,如线条,框,圆,位图等。U8g2图形库的缺点是...

    前端面试题js,html,css,vue

    vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 具体步骤: 第一步: 需要 observe 的数据...

    如何使用django的MTV开发模式返回一个网页

    选择哪些数据用于展示,指定显示模板,每个URL对应一个回调函数。 2.新建一个应用 在django最快程序开发流程上继续改进。 python manage.py startapp hello2app 3.修改hello2app hello2app中的views.py代码如下 ...

    ThinkPHP6.0完全开发手册

    主要新特性包括采用PHP7强类型(严格模式)、支持更多的PSR规范、多应用支持、ORM组件独立、改进的中间件机制、更强大和易用的查询、全新的事件系统、支持容器invoke回调模板引擎组件独立等。 手册还涵盖了ThinkPHP...

    JdbcTemplate完全学习

    JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连接,从而可以使用该连接做任何事情、StatementCallback通过回调接口返回给用户一个Statement,从而可以使用该...

    传智播客扫地僧视频讲义源码

    08_C动态库升级成框架案例_方法1动态库中直接添加回调函数_传智扫地僧 09_C动态库升级成框架案例_方法2把回调函数缓存到动态库_编写 10_C动态库升级成框架案例_方法2把回调函数混存到动态库_测试 11_C++基础课程day...

Global site tag (gtag.js) - Google Analytics