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. shell的简单批量curl接口脚本

    shell脚本可以说作用非常大,在服务器领域,用shell操作事务可比手动点击要方便快捷得多了.虽然只是文字界面,但是其强大的处理功能,会让各种操作超乎想象.而且,也可以将这些习惯移植到日常的工作当中 ...

  2. Eclipse中Maven的配置

    Maven 的配置 1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven 1.2 配置 Maven 的c ...

  3. Spring Web MVC(三)之注解

    [toc] spring web mvc 基于注解的优化 我写的注解是按照spring web的部件分类写的,这样的话比较方便查看,大家感觉有用的话可以分享个别人,希望对对更多的人有帮助.毕竟零基础开 ...

  4. [2013-06-05]bat脚本设置DNS

    有时候需要切换本机dns,将网络环境转至测试环境 @echo off netsh interface ip set dns name="本地连接" source=static ad ...

  5. 【转义字符】HTML 字符实体&lt; &gt: &amp;

    在开发中遇到javascript从后台获取的url 会被转义,如:http://localhost:8080/Home/Index?a=14&b=15&c=123,想把它转成http: ...

  6. 五个数据段之代码段、数据段、BSS、栈、堆

    继上文讲完了对内存管理的一些知识,下面笔者再对上篇文章的内容加以拓展,那么我们今天就来说一说5个数据段 五个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放磁盘载入的程序代码,或是存放取 ...

  7. 轻谈 return i++

    在写函数的时候,发现了又一个很有意思的事情 先上代码 public class Test{ static int number = 2; public static void main(String ...

  8. 【集美大学1411_助教博客】团队作业1——团队展示&选题 成绩

    第一次团队作业已经新鲜出炉啦,各位同学请查收.截止日期前,全班都按时提交了作业,而且有的团队还提交了两次呢,下次不要这样啦~ 题目 团队作业1--团队展示&选题 回顾 个人作业1--四则运算题 ...

  9. 团队作业4——第一次项目冲刺 fOURth DaY

    项目冲刺--Quadra Kill 兄弟们,再坚持一下,再坚持一下,再给我一个头我就五杀了. 今天可谓是项目的一个转折点,因为跳转和数据库已经基本写好啦,鼓掌~[啪啪啪啪啪啪] 让我们来看看今天大家做 ...

  10. 【Alpha阶段】第一次Scrum Meeting!

    每日任务 1.本次会议为第一次 Meeting会议: 2.本次会议在中午12:30,在第五社区5号楼楼下,召开本次会议为30分钟讨论接下来的任务: 一.今日站立式会议照片 二.每个人的工作 (有wor ...