最近,在预算管理系统编码的时候,发现持久化层的每个方法都存在一定程度的重复代码,而且这种重复的代码分为两中:
1、
数据更新、插入、删除时候用到的
UpdateOperator updateOperator =
new
UpdateOperator();
updateOperator.setDataSourceName(
"SYSDATASOURCE_DEFAULT"
);
2、
数据查询时候用到的
QueryOperator query =
new
QueryOperator();
query.setDataSourceName(
"SYSDATASOURCE_DEFAULT"
);
上面的代码分布在每个方法中,虽然重复的代码不是很多,但是如果在一个类中重复出现多次,容易引起视觉上的疲劳。说实在话在这里重复代码不多,也用不上什么设计模式,我只是借用这个地方来阐述一下模板方法在编码中的应用。
如果能够把他们抽象出来,定义一个模板方法类,定义两个接口。如
模板方法类
public
class
COperatorTemplate {
public
Object
query(IQueryAction action)
{
QueryOperator queryOperator =
new
QueryOperator();
queryOperator.setDataSourceName(
"SYSDATASOURCE_DEFAULT"
);
return
action.doInQueryActon(queryOperator);
}
public
Object update(IUpdateAction action)
{
UpdateOperator updateOperator =
new
UpdateOperator();
updateOperator.setDataSourceName(
"SYSDATASOURCE_DEFAULT"
);
return
action.doUpdateAction(updateOperator);
}
}
两个接口文件
public
interface
IUpdateAction {
Object doUpdateAction(UpdateOperator operator);
}
public
interface
IQueryAction {
Object doInQueryActon(QueryOperator operator);
}
好的,现在开始写一个类,来测试一下:
public
class
CFbsCorpPeriodDaoImp
implements
IFbsCorpPeriodDao {
private
COperatorTemplate
template
=
new
COperatorTemplate();
/**
*
@Description
:
返回周期编号为
periodId
的预算周期是否已经使用。
*
@param
periodId
*
@return
如果已经使用,返回
true
;否则,返回
false
;
*/
public
boolean
isUsedbByPeriod(
final
Long periodId) {
Boolean b = (Boolean)
this
.
template
.query(
new
IQueryAction(){
public
Object doInQueryActon(QueryOperator operator) {
String sql =
"select corp_id from fbs_corp_period where input_state > 0 and period_id = ? "
;
operator.setSql(sql);
operator.addParameter(
new
SqlParameter(SqlType.
NUMERIC
,periodId));
operator.access();
RsDataSet rds =
new
RsDataSet(operator.getSqlResultSet());
if
(rds.
rowCount
> 0)
return
new
Boolean(
true
);
else
return
new
Boolean(
false
);
}
});
return
b.booleanValue();
}
}
用匿名类的方式来实现
IQueryAciton
接口。我们只需要在
doInQueryAction
方法中只关注数据库访问的
sql
语句和获取结果。
分享到:
相关推荐
设计模式——模板方法模式模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...
本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: ...设计模式——模板方法模式 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
对象间的联动——观察者模式,处理对象的多种状态及其相互转换——状态模式,算法的封装与切换——策略模式,模板方法模式深度解析,操作复杂对象结构——访问者模式,设计模式与足球,多人联机射击游戏中的设计模式...
设计模式对你来说,应该不陌生。在面试中,经常会被问到;在工作...
在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义。 二、模板方法模式详细介绍 2.1 模板方法模式的定义 模板...
5.10TemplateMethodPattern(模板方法模式) 272 5.10.1定义 272 5.10.2现实例子——厨师烹调 274 5.10.3C#实例——数据库连接模板 274 5.10.4Java实例——冒泡排序模板 277 5.10.5优势和缺陷 280 5.10.6应用...
5.10TemplateMethodPattern(模板方法模式) 272 5.10.1定义 272 5.10.2现实例子——厨师烹调 274 5.10.3C#实例——数据库连接模板 274 5.10.4Java实例——冒泡排序模板 277 5.10.5优势和缺陷 280 5.10.6应用...
走进设计模式之—— Template(模板模式)
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
5.10 TEMPLATE METHOD(模板方法)——类行为型模式 5.11 VISITOR(访问者)——对象行为型模式 5.12 行为模式的讨论 第六章 结论 6.1 设计模式将带来什么 6.2 一套通用的设计词汇 6.3 书写文档和学习的辅助手段 ...
事实上,许多程序问题都不断的反复的遇到,而且许多用来解决这些问题的基本方法(或者说是设计模式)都已经浮现出来。设计模式就是一个教你如何利用真实可靠的设计来组织你的代码的模板。 设计模式历史 ...
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二、设计模式的六大原则 1、开闭原则(Open Close...
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 二、设计...
在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都...为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计模式来对这类情况进行设计,在模板方法模式中,将实现功能
算法的封装与切换——策略模式(四) 模板方法模式-Template Method Pattern 模板方法模式深度解析(一) 模板方法模式深度解析(二) 模板方法模式深度解析(三) 访问者模式-Visitor Pattern 操作复杂对象结构——...
责任链17.1 何为责任链模式17.2 何时使用责任链模式17.3 在RPG游戏中使用责任链模式17.4 总结第七部分 算法封装第18章 模板方法18.1 何为模板方法模式18.2 何时使用模板方法18.3 利用模板方法制作三明治18.4 保证...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节...