spring-模板设计模式

spring-模板设计模式

标签: spring 设计模式


还是为了好看
设计模式有很多,例如单例,动态代理,工厂等等;模板设计模式指的是将相应的模板方法提取出来再专门的一个位置定义,然后把相同通用过程的操作通过模板来实现。
一般有两种方式,jdbc的template是基于组合实现的

1. 基于继承实现模板设计模式


调用方法execute,会执行父类的模板和子类的方法;在模板方法中有一种函数叫钩子函数(例如这里的isLog),钩子函数的作用是让实现类可以通过一些方法来控制模板中的流程,多态得到MyJdbcTemplateByIn mt = new RoleDao();然后mt.execute()即可,我们就可以把公共的操作在模板里面写,然后运行。

父类MyJdbcTemplateByIn.java

public abstract class MyJdbcTemplateByIn {

    private void beginConnection() {
        System.out.println("begin connection");
    }

    private void closeConnection() {
        System.out.println("close connection");
    }

    public abstract void run();
    /**
     * 在模板方法中有一种函数叫做钩子函数,钩子函数的作用是让实现类可以通过一些方法来控制模板中的流程
     * @return
     */
    public abstract boolean isLog();

    public void execute() {
        beginConnection();
        if(isLog()) {
            System.out.println("加入了日志");
        }
        run();
        closeConnection();
    }

子类RoleDao.java

public class RoleDao extends MyJdbcTemplateByIn {
    @Override
    public void run() {
        System.out.println("role add");
    }

    @Override
    public boolean isLog() {
        return true;
    }

}

会输出:

begin connection
加入了日志
role add
close connection

2. 基于组合的实现


基于继承的实现主要问题在于只能实现一个方法,而要让模板实现多种方法,就需要用参数来传钩子函数;将所有要实现的方法都创建在模板中,然后在调用方法execute中直接传入一个钩子函数的接口Mycallback,然后在里面调用钩子函数doInTemplate。然后在需要实现的方法(如add)当中调用execute方法并自己实现钩子函数Mycallback,最后在roleDao.java中调用方法即可。

钩子函数MyCallback.java

public interface MyCallback {
    public void doInTemplate();
}

模板MyJdbcTemplate.java

public class MyJdbcTemplate {

    private void beginConnection() {
        System.out.println("begin connection");
    }

    private void closeConnection() {
        System.out.println("close connection");
    }

    /**
     * 调用方法,传入一个钩子函数的接口
     */
    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);
            }
        });
    }

方法RoleDao.java

public class RoleDao  {
    private MyJdbcTemplate mt = new MyJdbcTemplate();
    public void add(int id){
        mt.add(id);
    }

    public void delete(int id) {
        mt.delete(id);
    }
}

输出:

begin connection
add1
close connection

模板设计模式的应用情况有很多,其中主要在当一个程序需要执行大量重复操作的时候就可以考虑使用模板设计模式来实现,例如使用JDBC对数据库执行操作的时候,我们将开始连接,PreparedStatement执行sql语句,断开连接等方法写入模板之中,就可以在外部将sql语句和需要参数直接作为方法参数传入即可,简化代码。
例如:传入user和id即可。update方法会将sql语句和参数传入模板执行相应操作。

public void add(User user,int gid) {
jdbcTemplate.update("insert into t_user(username,password,nickname,gid) value (?,?,?,?)",
                user.getUsername(),user.getPassword(),user.getNickname(),gid);
                }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值