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. WebClient 调用api

    使用: /// <summary> /// 获取用户信息 /// </summary> /// <param name="code"></ ...

  2. c#Reverse字符串

    class Program { static void Main(string[] args) { // 输出 ypoc si yek eht string str = "the key i ...

  3. Hacking JWT(JSON Web Token)

    0x01 JWT工作流程 JSON Web Token(JWT)是一个非常轻巧的规范. 这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. JWT常被用于前后端分离,可以和Restful ...

  4. Andrew Ng机器学习课程笔记--week4(神经网络)

    Neural Networks: Representation 一. 内容概要 Neural Network Model Representation 1 Model Representation 2 ...

  5. python自学1——代码优化1

    优化了上次的代码,请求方式可接收get和post两种,代码中对两种方式做了判断. 测试结果中提取了测试用例的名称.请求返回的状态.请求的时间. #coding:utf-8 import xlrd im ...

  6. jquery选中radio或checkbox的正确姿势

    jquery选中radio或checkbox的正确姿势 Intro 前几天突然遇到一个问题,没有任何征兆的..,jquery 选中radio button单选框时,一直没有办法选中,后来查了许多资料, ...

  7. 记一次JavaWeb网站技术架构总结

    题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充. 俗话说的好,冰冻三尺非一日之寒, ...

  8. c#实现服务端webSocket

    现阶段socket通信使用TCP.UDP协议,其中TCP协议相对来说比较安全稳定!本文也是来讲解TCP为主(恕在下学艺不精). 下面是个人理解的tcp/ip进行通讯之间的三次握手! 1.客户端先发送报 ...

  9. oracle时间范围查询

    当时间精确到秒的指标和时间精确到日的时间进行对比是恒不等于的,但是可以判断大于或者等于的情况. 举个例子,指标[时间精确到秒] select 时间精确到秒 from table where 时间精确到 ...

  10. 【转】Spring AOP 实现之CGLIB

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp91    cglib(Code Generation Library)是 ...