`
ican
  • 浏览: 6659 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式——模板方法

阅读更多

最近,在预算管理系统编码的时候,发现持久化层的每个方法都存在一定程度的重复代码,而且这种重复的代码分为两中:

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 语句和获取结果。

 

分享到:
评论

相关推荐

    python 模板方法模式(示例)

    设计模式——模板方法模式模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...

    Python设计模式之模板方法模式实例详解

    本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: ...设计模式——模板方法模式 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子

    设计模式可复用面向对象软件的基础.zip

    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#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    Java设计模式 版本2

    对象间的联动——观察者模式,处理对象的多种状态及其相互转换——状态模式,算法的封装与切换——策略模式,模板方法模式深度解析,操作复杂对象结构——访问者模式,设计模式与足球,多人联机射击游戏中的设计模式...

    设计模式之美——教你写出高质量代码

    设计模式对你来说,应该不陌生。在面试中,经常会被问到;在工作...

    详解C#设计模式编程中的模板方法模式使用

    在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义。 二、模板方法模式详细介绍 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(模板模式)

    走进设计模式之—— Template(模板模式)

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第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 书写文档和学习的辅助手段 ...

    PHP设计模式(chm版)

    事实上,许多程序问题都不断的反复的遇到,而且许多用来解决这些问题的基本方法(或者说是设计模式)都已经浮现出来。设计模式就是一个教你如何利用真实可靠的设计来组织你的代码的模板。 设计模式历史 ...

    24种设计模式介绍与6大设计原则

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二、设计模式的六大原则 1、开闭原则(Open Close...

    设计模式Demo

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 二、设计...

    模板方法模式深度解析

    在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都...为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计模式来对这类情况进行设计,在模板方法模式中,将实现功能

    design-pattern-java.pdf

    算法的封装与切换——策略模式(四) 模板方法模式-Template Method Pattern 模板方法模式深度解析(一) 模板方法模式深度解析(二) 模板方法模式深度解析(三) 访问者模式-Visitor Pattern 操作复杂对象结构——...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    责任链17.1 何为责任链模式17.2 何时使用责任链模式17.3 在RPG游戏中使用责任链模式17.4 总结第七部分 算法封装第18章 模板方法18.1 何为模板方法模式18.2 何时使用模板方法18.3 利用模板方法制作三明治18.4 保证...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    C#23种设计模式_示例源代码及PDF

    工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节...

Global site tag (gtag.js) - Google Analytics