zoukankan      html  css  js  c++  java
  • java模版方法

    模版方法就是建立一个类,在这个类中封装了所有的公共实现的部分,而对有不同实现方式的部分使用抽象的定义,具体的实现交给继承与此类的子类来实现,这是基于继承的实现的模版方法模式:

    定义一个抽象的模块:

    public abstract class Template {

        private void openConnection(){
            System.out.println("open a connection");
        }
        
        private void closeConnenction(){
            System.out.println("close a connenction");
        }
        
        public abstract void run();

        public void log(){
            System.out.println("add log");
        }
        
        public abstract boolean isLog();
        
        //模版方法,公用的方法有父类实现,有不同实现的的方法定义为抽象方法
        //有该类的子类去完成具体的实现,而execute方法就像一个模块,规定了实现
        //某个操作的先后顺序
        public  void execute(){
            openConnection();
            run();
            if(isLog()){
                log();
            }
            closeConnenction();
        }
        
    }

    定义两个子类:

    public class MyTemplate extends Template {

        @Override
        public void run() {
            System.out.println("my run");
        }

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

    public class LogTemplate extends Template {

        @Override
        public void run() {
            System.out.println("log run");

        }

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

    测试类:

    public class TestTemplate {

        @Test
        public void testTemplate01(){
            Template myTemplate = new MyTemplate();
            Template logTemplate = new LogTemplate();
            myTemplate.execute();
            logTemplate.execute();
        }
    }

     通过组合的方式实现模版方法:

    定义一个模块类

    public class Template {

        private void openConnection(){
            System.out.println("open a connection");
        }
        
        private void closeConnenction(){
            System.out.println("close a connenction");
        }
        
         //传入一个实现了TemplateCallback接口的对象,该对象用于回调传入的对象
        //的具体实现的方法
        public void execute(TemplateCallback tcb){
            openConnection();
            
            tcb.doInTemplate();
            
            closeConnenction();
        }
        
        //执行一个模版类的execute的模版方法,传入一个实现了TemplateCallback接口的对象
        //在doInTemplate中可封装一个执行相同功能而参数不同的方法(比如传入不同的sql语句和
        //不同的查询参数
        public void add(final int id){
            execute(new TemplateCallback(){
                @Override
                public void doInTemplate() {
                    System.out.println("add:"+ id);
                }
            });
        }
        
        public void delete(final int id){
            execute(new TemplateCallback(){
                @Override
                public void doInTemplate() {
                    System.out.println("delete:" + id);
                }
            });
        }
    }

    定义一个回调的接口类

    public interface TemplateCallback {

        public void doInTemplate();
    }
    定义一个客户端类


    public class ClientTemplate {

        //保持一个模版方法类的引用
        private Template template = new Template();
        
        public void add(int id){
            //调用模块对象的方法并传递参数
            template.add(id);
        }
        
        public void delete(int id){
            template.delete(id);
        }
        
    }
    测试类

    public class TestTemplate {
     
        @Test
        public void testTemplateCombination(){
            ClientTemplate ct = new ClientTemplate();
            ct.add(3);
        }
    }

  • 相关阅读:
    【原创】枚举Android系统的进程、任务和服务的信息
    WPF学习笔记“控件”一:控件基本属性
    WCF学习笔记:基础一
    WPF学习笔记“布局”三:Grid分割窗口
    WPF学习笔记“XAML”一:基础
    WPF学习笔记“窗口”一:入门
    WPF学习笔记“形状”:基础
    WPF学习笔记“窗口”二:入门
    WPF学习笔记“窗口”四:三种方式不规则窗口实现大小的改变
    WPF学习笔记“窗口”三:入门
  • 原文地址:https://www.cnblogs.com/charleszhang1988/p/3059572.html
Copyright © 2011-2022 走看看