模板设计模式Java初印象

来源:互联网 发布:数据追溯软件怎么编 编辑:程序博客网 时间:2024/05/21 19:42

概述
====

模板设计模式的两种方式:
1.基于继承的实现
2.基于组合的实现

一、基于继承的实现
1.首先,创建一个模板类MyJdbcTemplateByIn,在模板类的execute方法中定义调用过程

public abstract class MyJdbcTemplateByIn {    private void beginConnection()    {        System.out.println("begin connetction");    }    private void closeConnection()    {        System.out.println("close connetction");    }    public abstract void run();    public void execute()    {        beginConnection();        run();        closeConnection();    }   }

2.创建类RoleDao和MessageDao继承于模板类MyJdbcTemplateByIn,并分别重写run方法

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

3.测试

public class TestTemplate {    //基于继承的方式    @test    public void test1() throws Exception {        MyJdbcTemplateByIn myJdbcTemplateByIn = new RoleDao();        myJdbcTemplateByIn.execute();        System.out.println("=============");        MyJdbcTemplateByIn myJdbcTemplateByIn2 = new MessageDao();        myJdbcTemplateByIn2.execute();    }

运行结果为

begin connetctionrole addclose connetction=============begin connetctionmessage addclose connetction

二、基于组合的实现
1.首先创建模板类

public class MyJdbcTemplate {    private void beginConnection()    {        System.out.println("begin connetction");    }    private void closeConnection()    {        System.out.println("close connetction");    }    /**     * 调用方法:传入一个钩子函数的接口     */    public void execute(MyCallback callback)    {        beginConnection();        callback.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);            }        });    }}
public interface MyCallback {     public void doInTemplate();}
public class RoleDao extends MyJdbcTemplateByIn {    private MyJdbcTemplate mt = new MyJdbcTemplate();    public void add(int id)    {        mt.add(id);    }    public void delete(int id)    {        mt.delete(id);    }    @Override    public void run() {        System.out.println("role add");    }    @Override    public boolean isLog() {        return false;    }}
public class TestTemplate {    //基于组合的方式    @Test    public void test2() throws Exception {        RoleDao roleDao = new RoleDao();        roleDao.add(1);        System.out.println("=============");        roleDao.delete(2);    }}

运行结果:

begin connetctionadd1close connetction=============begin connetctiondelete2close connetction
原创粉丝点击