模板模式的代码实现demo

来源:互联网 发布:所有股票数据 编辑:程序博客网 时间:2024/06/04 19:18

首先新建一个父类抽象类AbsPopulator:可以默认去执行一些特定的子类的方法

package com.licq.template; import java.lang.reflect.Method;import java.lang.reflect.Modifier; public abstract class AbsPopulator {         //获取所有的public方法    public final void dataInitialing()throws Exception{        doInit();         Method[] methods = getClass().getMethods();         if(null != methods && methods.length >0){             for(Method m:methods){                 //判断是否根据数据初始化                 if(isInitDataMethod(m)){                     m.invoke(this);                 }             }         }    }     //判断是否是数据初始化方法,基本方法鉴别器    private boolean isInitDataMethod(Method m) {                  return m.getName().startsWith("init")//是否是init开始                &&Modifier.isPublic(m.getModifiers())//是否是public的                &&Void.TYPE.equals(m.getReturnType())//返回值是否是void                &&!m.isVarArgs()//输入参数是否为空                &&!Modifier.isAbstract(m.getModifiers());//方法不能为抽象的    }    public abstract void doInit()throws Exception;}
然后实现一个子类Populator实现AbsPopulator类:
package com.licq.template; public class Populator extends AbsPopulator {     public void initUser() {        // TODO Auto-generated method stub        System.out.println("----初始用户表信息----");    }    public void initPassword() {        // TODO Auto-generated method stub        System.out.println("-------初始化密码----------");    }         public void initJobs() {        // TODO Auto-generated method stub        System.out.println("----------初始化工作任务--------------");    }    @Override    public void doInit() throws Exception {        // TODO Auto-generated method stub        System.out.println("----------初始化开始了--------------");    }    /**     * @param args     * @throws Exception      */    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        AbsPopulator ap = new Populator();        ap.dataInitialing();        System.out.println("----------执行完成了--------------");    } }
运行结果:

----------初始化开始了------------------初始用户表信息-----------初始化密码--------------------初始化工作任务------------------------执行完成了--------------

AbsPopulator类作为一个模板提供给消费者的话,他的子类可以按照里面声明定义很多自己的方法逻辑,真的很强大。但是代码却是很简练,无需很多重复代码,这也是非常符合我们的OCP原则。


本文的同步更新博客:模板模式的代码实现demo---海派Dubbo





0 0