设计模式 - Template Method
今天下午主要研究了设计模式中的Template Method(模版方法设计模式)。
在Spring中,对各种O/RM进行了封装,比如对Hibernate有HibernateTemplate封装;对JDBC有jdbcTemplate封装。这些封装均实践了Template Method设计模式。
拿HibernateTemplate来说,Spring通过该类对Hibernate的事务管理进行了封装。
/* 本帖准备模拟HibernateTemplate的实现,该类是Spring对Hibernate操作事务的封装,采用了Template Method设计模式*/
/* 当很多方法的执行体有大量重复代码时(比如对事务的处理), 可以考虑将不动的部分抽取出来而不同的部分做成接口的形式,共同形成一个方法 */
/* 通过实现接口的形式,将不同的业务逻辑加到方法中 */
直接上代码:
1. 接口:
public interface MyHibernateCallBack {
public void doInHibernate(Session session);
}
2. MyHibernateTemplate
public class MyHibernateTemplate {
@Autowired
private SessionFactory sessionFactory;
/* 模拟HibernateTemplate的实现,该类是Spring对Hibernate操作事务的封装,采用了Template Method设计模式*/
/* 当很多方法的执行体有大量重复代码时(比如对事务的处理), 可以考虑将不动的部分抽取出来而不同的部分做成接口的形式,共同形成一个方法 */
/* 通过实现接口的形式,将不同的业务逻辑加到方法中 */
/* 共同代码体 */
private void executeWithSession(MyHibernateCallBack callback){
Session session = null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
/* 不同之处,则根据上下文抽取出接口 */
callback.doInHibernate(session);
session.getTransaction().commit();
} catch (RuntimeException e){
e.printStackTrace();
if (session != null){
session.getTransaction().rollback();
}
} finally {
if (session != null){
session.close();
}
}
}
public void save(final User user) {
/* 通过内部类实现接口 */
MyHibernateCallBack callBack = new MyHibernateCallBack() {
@Override
public void doInHibernate(Session session) {
session.save(user);
}
};
executeWithSession(callBack);
}
}
3. 调用:
public class UserDAOImpl implements UserDAO {
@Resource
private MyHibernateTemplate myHibernateTemplate;
@Override
public void save(User user) {
myHibernateTemplate.save(user); //一句搞定!
}
}
说实在的,重要的是思想!
设计模式 - Template Method的更多相关文章
- 设计模式 Template Method模式 显示程序猿的一天
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清 ...
- C++设计模式:Template Method
我使用过一个简单的后台服务框架.这个框架上手很容易,我只需要继承一个基类,同时实现,或重写(override)基类声明的几个接口(这些接口声明为虚函数,或者纯虚函数),然后调用基类定义好的run()函 ...
- 设计模式Template Method模式(Template Method)摘录
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例.怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还 ...
- 设计模式-模板方法设计模式--Template Method design pattern
/** * Abstract implementation of the {@link org.springframework.context.ApplicationContext} * interf ...
- Android 设计模式Template Method模式
自定义模板方法模式:定义的算法的骨架中的方法,虽然某些步骤推迟到子类中,下模板方法允许子类不能改变在的情况下,该算法的结构.算法重新定义某些步骤. 设计原则:不要给我们打电话.我会打电话给你.(像猎头 ...
- 设计模式-Template Method Pattern
将generic部份放在abstract base class中的实现的方法中,而将和具体context相关的部份作为abstract base class的虚方法,由derivatives去实现. ...
- Caffe源码理解3:Layer基类与template method设计模式
目录 写在前面 template method设计模式 Layer 基类 Layer成员变量 构造与析构 SetUp成员函数 前向传播与反向传播 其他成员函数 参考 博客:blog.shinelee. ...
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
- C#设计模式系列:模板方法模式(Template Method)
你去银行取款的时候,银行会给你一张取款单,这张取款单就是一个模板,它把公共的内容提取到模板中,只留下部分让用户来填写.在软件系统中,将多个类的共有内容提取到一个模板中的思想便是模板方法模式的思想. 模 ...
随机推荐
- Vue.js常见问题
1.Vuejs组件 vuejs构建组件使用 Vue.component('componentName',{ /*component*/ }): 这里注意一点,组件要先注册再使用,也就是说: Vue.c ...
- Maven学习随记
慕课网视频教程:http://www.imooc.com/learn/443 ====Maven是什么 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件 ...
- [terry笔记]RMAN综合学习之配置
[terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...
- 测试C#代码执行时间
这个测试方法不是太精确,不过在同等环境下 可以测试下C#代码逻辑的执行性能吧 网上Copy来的. System.Diagnostics.Stopwatch stopwatch = new System ...
- poj 2560 Freckles
题目连接 http://poj.org/problem?id=2560 Freckles Description In an episode of the Dick Van Dyke show, li ...
- hdu 1885 Key Task
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Description The Czech Technical Univers ...
- hdu 2094 产生冠军
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2094 产生冠军 Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比 ...
- 九度oj 1528 最长回文子串
原题链接:http://ac.jobdu.com/problem.php?pid=1528 小白书上的做法,不过这个还要简单些... #include<algorithm> #includ ...
- Apple Watch应用开发经验谈:我遇到的那些坑
本文作者张忠良是滴答清单Apple Watch版应用的开发工程师,他用了一周的时间使用纯Objective-C语言完成了Apple Watch版滴答清单应用的开发工作.在这里,他从开发角度阐述了个人对 ...
- Linux android开发环境问题:Unexcepted exception:cannot run program "android-sdk-linux/platfor-tools/adb" :err=2,No such file or directory.
出现这个问题的原因: 我的linux是64位 ,而adb目前只有32位的,所以要安装运行32的环境. 不同的linux系统需要安装的不同: 我的Centos 解决方案如下 其他linux操作系统(参 ...