Spring-java-模板设计模式
1,模板设计模式指的是将相应的模板方法提取出来在专门的位置定义,然后把相同调用过程操作,通过模板来实现
对于模板设计模式而言,一般有两种实现方式
1)基于继承的实现
2)基于组合的实现
Spring的JdbcTemplate就是通过基于组合实现的模板设计模式实现的
2,基于继承的实现
package com.yangw.spring.template;
/**
* 基于继承实现模板设计模式
* @author Administrator
*/
public abstract class MyJdbcTemplate1 {
private void beginConnection(){
System.out.println("begin ...");
}
private void closeConnection(){
System.out.println("end ...");
}
//抽象方法
protected abstract void run();
//在模板中有一种方法叫钩子方法,作用是让实现类可以通过一些方法来控制模板的流程
protected abstract boolean isLog();
public void execute(){
beginConnection();
if(isLog()){
System.out.println("add logger");
}
run();
closeConnection();
}
}
package com.yangw.spring.dao;
import com.yangw.spring.template.MyJdbcTemplate1;
public class RoleDao extends MyJdbcTemplate1 {
@Override
protected void run() {
System.out.println("role add ");
}
/**
* 实现类实现具体的钩子方法,控制模板流程
*/
@Override
protected boolean isLog() {
return true;
}
}
package com.yangw.spring.test;
import org.junit.Test;import com.yangw.spring.dao.RoleDao;
import com.yangw.spring.template.MyJdbcTemplate1;
public class TestTemplate {
@Test
public void test01(){
MyJdbcTemplate1 mt=new RoleDao();
mt.execute();
}
}
3, 基于组合的实现
package com.yangw.spring.template;
/**
* 基于组合的模板设计模式
* @author Administrator
*
*/
public class MyJdbcTemplate2 {
private void beginConnection(){
System.out.println("begin ...");
}
private void closeConnection(){
System.out.println("end ...");
}
/**
* 调用方法,传入一个钩子函数接口
*/
public void execute (MyCallback call){
beginConnection();
//中间通过钩子勾起某一个函数
call.doInTemplate();
closeConnection();
}
/**
* 将所有要实现的方法,全部放到模板中
*/
public void add(final int id){
execute(new MyCallback() {
@Override
public void doInTemplate() {
System.out.println("add:"+id);
}
});
}
public void delete(final int id){
execute(new MyCallback() {
@Override
public void doInTemplate() {
System.out.println("delete:"+id);
}
});
}
}
package com.yangw.spring.dao;
import com.yangw.spring.template.MyJdbcTemplate2;
public class MessageDao {
private MyJdbcTemplate2 mt=new MyJdbcTemplate2();
public void addMsg(int id){
mt.add(id);
}
}
package com.yangw.spring.test;
import org.junit.Test;
import com.yangw.spring.dao.MessageDao;public class TestTemplate {
@Test
public void test02(){
MessageDao msgDao=new MessageDao();
msgDao.addMsg(1);
}
}
Spring-java-模板设计模式的更多相关文章
- java模板设计模式
1.概述 模板设计模式定义:定义一个操作中的算法骨架,将步骤延迟到子类中. 模板设计模式是一种行为设计模式,一般是准备一个抽象类,将部分逻辑以具体方法或者具体的构造函数实现,然后声明一些抽象方法,这样 ...
- Java中的模板设计模式,太实用了!
顾名思义,模板设计模式就是将许多公用的常用的代码封装成一个模板,我们只需要实现不同的业务需求的代码,然后和模板组合在一起,那么就得到完整的逻辑. 在我们的日常开发中,常用的模板模式有两种实现方式:继承 ...
- JAVA设计模式:模板设计模式
1.模板设计模式,是为了体现继承的作用.它主要的作用就是在类中定义一些公共的方法和标准,而其具体的实现则叫给其子类来根据子类具体的行为来实现:因为模板设计模式中必经还有一些自己的方法不是抽象的方法,只 ...
- Java 设计模式 ------ 模板设计模式
模板设计模式主要来源于生活中有一些事情是有模板可以遵循的.举两个生活中的例子,如泡茶和泡咖啡,看一看. 泡茶有以下四个步骤: 1, 烧开水; 2 把茶放到水杯中; 3,倒入开水; 4, 加糖. 泡 ...
- Java设计模式——模板设计模式
模板设计模式 1.模板模式简介 模板模式(Template ):模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑 ...
- 转 分享我在阿里工作十年接触过Java框架设计模式
转 原文: 分享我在阿里工作十年接触过Java框架设计模式 一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者 ...
- jetbrick,新一代 Java 模板引擎,具有高性能和高扩展性
新一代 Java 模板引擎,具有高性能和高扩展性. <!-- Jetbrick Template Engineer --> <dependency> <groupId&g ...
- Spring中的设计模式
[Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用] [http://www.geek521.c ...
- Template Method 模板设计模式
什么是模板设计模式 对于不了解的模板设计模式的来说,可以认为如同古代的造纸术一样,纸所以成型,取决于用了模板的形状,形状又由镂空的木板组成,而你想要造什么纸,又取决于你使用什么材料. 上面提到了两个关 ...
- Java经典设计模式之七大结构型模式(附实例和详解)
博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...
随机推荐
- 命令行创建Maven项目卡住以及出错解决办法。
第一次通过命令行创建maven项目.结果,果不其然啊,还是出问题了,不过出问题比没有出问题强,知道哪里有问题并学会解决也是一种收获. 遇到的第一个问题,在从仓库下载东西的时候会卡住,我开始以为是网速问 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(五)用户接口层之提取媒体流数据
当RTSP客户端向RTSP服务端发送完PLAY命令后,RTSP服务端就会另外开启UDP端口(SDP协商定义的端口)发送RTP媒体流数据包.这些数据包之间会间隔一段时间(毫秒级)陆续被发送到RTSP客户 ...
- 【VMware Workstation】NAT映射虚拟机所在网络
配置虚拟网络编辑器 配置网络映射关系
- 在 ASP.NET Core 中执行租户服务
在 ASP.NET Core 中执行租户服务 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://gunna ...
- Struts2-文件上传下载
Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截器 默认在 defaultSta ...
- STL中队列(queue)的使用方法
STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...
- [2014-02-19]如何移除响应头中的.net framework 版本信息 以及mvc版本信息?
先来看一个简单mvc3网站的响应头 修改Global.asax文件 在Application_Start方法中添加如下代码 MvcHandler.DisableMvcResponseHeader = ...
- spring整合mybatis错误:HTTP Status 404 - xxx-xxx....
运行环境:jdk1.7.0_17 + tomcat 7 + spring 3.2.0 +mybatis 3.2.7+ eclipse,访问路径:http://localhost:8085/Spring ...
- 编辑sass报错:error style.scss (Line 3: Invalid GBK character "\xE5")解决办法
cmd.exe /D /C call C:/Ruby23-x64/bin/scss.bat --no-cache --update header.scss:header.css error heade ...
- CyclicBarrier和CountDownLatch介绍
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp70 CyclicBarrier介绍 (一) 一个同步辅助类,它允许一组线 ...