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. 一道风骚的DP

    也是校赛学长出的一道题~想穿了很简单..但我还是听了学长讲才明白. 观察力有待提高. Problem D: YaoBIG's extra homeworkTime LimitMemory Limit1 ...

  2. Tomcat知识1

  3. java选择排序详解

    排序算法--选择排序 public class Selector implements ISortAble{ @Override public void sort(int[] a) { int n=a ...

  4. JavaScript--我发现!原来你是这样的JS(1)

    一.前言: 前段时间看红宝书(JavaScript高级程序设计),但没有计划的去看,也没有做详细的笔记,读了之后有点空虚,感觉不对劲啊,学的东西很难记住,印象不深啊,有种挫败感,作前端的js都学不好怎 ...

  5. spring-session 共享

    Spring session 共享 一.引入依赖 <dependency> <groupId>redis.clients</groupId> <artifac ...

  6. 深入浅出数据结构C语言版(15)——优先队列(堆)

    在普通队列中,元素出队的顺序是由元素入队时间决定的,也就是谁先入队,谁先出队.但是有时候我们希望有这样的一个队列:谁先入队不重要,重要的是谁的"优先级高",优先级越高越先出队.这样 ...

  7. Javascript用数组实现栈和队列

    栈是遵循后进先出(LIFO)规则的一种有序集合,比如桌上的一叠书,我们只能从上面放或取. 队列是遵循先进先出(FIFO)规则的一种有序集合,比如排队,先排到的先离开. 数组也是一种有序的集合,它与上面 ...

  8. 9-9害死人不偿命的(3n+1)猜想

    1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ...

  9. chrome开发工具指南(十)

    检查和删除 Cookie 从 Application 面板检查和删除 Cookie. TL;DR 查看与 Cookie 有关的详细信息,例如名称.值.网域和大小,等等. 删除单个 Cookie.选定网 ...

  10. UIImageView动画制作

    1.先初始化一个UIImageView的视图窗口 如:anima UIImageView *anima = [UIImageView alloc]initWithFrame(0,0,100,100); ...