模板模式的代码实现demo

本文介绍了一种使用Java实现的模板模式代码案例。通过抽象类AbsPopulator定义了数据初始化的基本结构,子类Populator实现了具体的数据初始化逻辑。该模式允许子类定义其初始化流程中的某些步骤,同时保持整体流程的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先新建一个父类抽象类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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值