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-模板设计模式的更多相关文章

  1. java模板设计模式

    1.概述 模板设计模式定义:定义一个操作中的算法骨架,将步骤延迟到子类中. 模板设计模式是一种行为设计模式,一般是准备一个抽象类,将部分逻辑以具体方法或者具体的构造函数实现,然后声明一些抽象方法,这样 ...

  2. Java中的模板设计模式,太实用了!

    顾名思义,模板设计模式就是将许多公用的常用的代码封装成一个模板,我们只需要实现不同的业务需求的代码,然后和模板组合在一起,那么就得到完整的逻辑. 在我们的日常开发中,常用的模板模式有两种实现方式:继承 ...

  3. JAVA设计模式:模板设计模式

    1.模板设计模式,是为了体现继承的作用.它主要的作用就是在类中定义一些公共的方法和标准,而其具体的实现则叫给其子类来根据子类具体的行为来实现:因为模板设计模式中必经还有一些自己的方法不是抽象的方法,只 ...

  4. Java 设计模式 ------ 模板设计模式

    模板设计模式主要来源于生活中有一些事情是有模板可以遵循的.举两个生活中的例子,如泡茶和泡咖啡,看一看. 泡茶有以下四个步骤:  1, 烧开水;  2 把茶放到水杯中; 3,倒入开水; 4, 加糖. 泡 ...

  5. Java设计模式——模板设计模式

    模板设计模式 1.模板模式简介 模板模式(Template ):模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑 ...

  6. 转 分享我在阿里工作十年接触过Java框架设计模式

    转 原文: 分享我在阿里工作十年接触过Java框架设计模式 一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者 ...

  7. jetbrick,新一代 Java 模板引擎,具有高性能和高扩展性

    新一代 Java 模板引擎,具有高性能和高扩展性. <!-- Jetbrick Template Engineer --> <dependency> <groupId&g ...

  8. Spring中的设计模式

    [Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用]    [http://www.geek521.c ...

  9. Template Method 模板设计模式

    什么是模板设计模式 对于不了解的模板设计模式的来说,可以认为如同古代的造纸术一样,纸所以成型,取决于用了模板的形状,形状又由镂空的木板组成,而你想要造什么纸,又取决于你使用什么材料. 上面提到了两个关 ...

  10. Java经典设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

随机推荐

  1. 来杯咖啡看Pecan

    Pecan的介绍及安装 文章内容来自官方文档:http://pecan.readthedocs.io/en/latest/quick_start.html Pecan的介绍:  Pecan是一个路由对 ...

  2. 第4天:JS入门-给div设置宽高背景色

    今天学习了js入门课程,听的不多,做了个小练习,给div设置宽高.背景色.一点点都是进步.核心代码如下: <!DOCTYPE html><html lang="en&quo ...

  3. 软件测试学习LINUX常用命令

    测试初学者常用的LINUX命令,不懂得的可加Q群答疑649017887 一.常用管理命令:1. shutdown -h now 关机命令2. shutdown -r now (reboot) 立即重启 ...

  4. fodera20安装后的配置

    最近安装了Fedora 20 64bit,以下是一些优化配置,使之更适合国人使用. 1,安装gnome-tweak-tool设置工具 Fedora 19自带的系统设置工具十分简单,一些重要的地方都不能 ...

  5. 【Spring】XML配置整合Mybatis

    注意:项目开发使用了mybatis的mapper代理! 首先是mybatis自己的配置文件,被spring整合之后,只有typeAliases存在了,其他都整合在了spring-mybatis.xml ...

  6. 开发流程和Maven的配置

    按照何种开发模型? V模型:项目需求--->概要设计(功能模块) --->详细设计(页面的设计,数据库的设计) --->编码(框架的搭建,功能的实现)---->测试(单元测试, ...

  7. C++ 大多数人将 cin::sync() 视为清除缓存区函数的误用

    ps:我发现有网站将我之前写的标题为:C++ 关于大多数人将cin::sync()视为清楚缓冲区函数的错误   的文章转载了,声明一下那篇文章中的内容可能存在错误,本人已删,请注意. 一百度,大多数人 ...

  8. HTTP Components简介

    基于版本4.5.x 简介 组件 HttpClient,核心组件 HC Fluent,提供了流式操作接口 HttpMime,提供文件上传时用到的一些工具类 HttpClient Cache,有待学习 H ...

  9. 共享Visio和project的下载链接

    好东西就应该共享  下面的是最新版的Visio和project的百度云链接 Visio的链接:http://pan.baidu.com/s/1o8UJq4M 密码:sltu project的链接:ht ...

  10. Linux虚拟机之间实现密钥登陆

    Server1与Server2在同一虚拟网络当中,在Server2中使用Server1的Hostname连接Server1,并且无需密码认证. Server1,  Hostname:  hlmvmea ...