最近,在预算管理系统编码的时候,发现持久化层的每个方法都存在一定程度的重复代码,而且这种重复的代码分为两中:
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):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...
《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...
本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: ...设计模式——模板方法模式 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子
设计模式并不是具体的代码或库,而是一种经验总结,是软件开发人员在长期实践中形成的通用解决方案的模板。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。单例模式常用于控制资源的共享,如...
在本文中,我们将重点讨论一种常见的设计模式——模板方法模式。 模板方法模式属于行为设计模式,它在对象的算法骨架固定,但部分步骤可变的情况下非常有用。这种模式定义了一个操作中的算法框架,并允许子类在不...
在文档中提到的两种设计模式——模板方法模式和策略模式——都是行为型设计模式。模板方法模式定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法...
模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中;备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态;观察者模式定义了对象之间...
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
本篇文章将探讨如何利用设计模式中的模板方法模式来实现数据库访问层,以简化开发工作。 模板方法模式是一种行为设计模式,它定义了算法的骨架,并允许子类在不改变算法结构的情况下,对特定步骤进行重定义。在...
在软件设计领域,设计模式是解决常见问题的模板,它们为开发者提供了标准的解决方案,以提高代码的可读性、可维护性和复用性。本文将深入探讨两种常见的工厂模式:简单工厂模式和工厂方法模式。 简单工厂模式,也...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在不修改原有对象的基础上,为对象添加额外的功能或者...
模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...
在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义 1. 模板方法模式的定义 模板方法模式——在一个抽象类中定义...
在OOD中,设计模式是一种解决常见问题的模板,它是在特定上下文中经过验证的解决方案。设计模式不是具体的代码,而是一种通用的、可复用的设计方案,描述了在特定情况下,如何将对象和类组织在一起以解决特定问题。...
模板方法模式是一种行为设计模式,它允许在抽象类中定义算法框架,而将具体步骤的实现推迟到子类中。这种模式通常用于那些算法的骨架已经固定,但部分步骤可以根据具体环境有所不同的情况。 在Java中,模板方法模式...