为了账号安全,请及时绑定邮箱和手机立即绑定

java设计模式-模板模式学习记录

抽时间学习了Arthur讲师的模板模式的课程,课程虽然很短,但老师讲得非常清楚,当然这个模板模式看起来也比较简单。为了记的牢固,正好写个手记记录一下。
模板模式原理
模板模式及基于JAVA中的继承技术来实现的。父类定义了一个整体的业务流程,父类实现了这些流程的调用顺序的方法,这个方法不可被重写的,方法定义前要加final。同时业务逻辑中通用的部分,在父类实现,个性化的实现交给子类。

什么情况下使用模板方法
如果不知道什么情况下要使用模板方法,就先梳理自己要实现的业务逻辑。比如在实际运维过程中,现在有个自动化运维任务,就是一键重启weblogic。我们维护了100多套中间件,启动的流程相同,但是有weblogic、was、tomcat等不同,同时启动也分两个场景,一个是计划重启,一个是故障下重启,他们的启动方法不同。我们可以将一键重启的逻辑总结如下:
计划内的正常重启
1、读取配置文件(通用)
2、关闭中间件
3、切换中间件日志(将原来的日志改名)
4、启动中间件
5、验证中间件是否完成启动
故障下的启动:
1、读取配置文件(通用)
2、自动收集中间件运行信息(线程、环境信息输出)(通用)
3、关闭中间件
4、切换中间件日志(将原来的日志改名)
5、启动中间件
6、验证中间件是否完成启动
可以看出,一键启动,故障下的启动,多出一个信息收集,这个在实际的生产环境中,主要指的是线程信息的收集,方便对故障进行分析。其他流程都相同,信息采集正好可以使用钩子来实现。

分析完成后,剩下的就是实现的代码了。
父类:
public abstract class MiddlewareRestart {
/*

  • 重启流程
  • */
    public final void restart() {
    readConfig();//读配置

    if ( execGetThread()) {
        getThread();//收集线程
    }
    stop();//停止
    renameLog();//改名
    start();//启动
    isrun();//验证

    }
    /*

  • 读取配置
  • */
    private void readConfig() {
    System.out.println("读取了环境信息!");
    }
    //关闭中间件
    abstract void stop();
    //修改中间件日志名称,重启后中间件日志建立新的日志文件
    abstract void renameLog();
    //启动中间件
    abstract void start();
    //验证中间件运行情况
    abstract void isrun();

    private void getThread() {
    System.out.println("进程:已经执行了三次 kill -3 命令");
    }
    //是否收集线程,默认不收集
    boolean execGetThread(){
    return false;
    }
    }
    tomcat 重启子类

public class TomcatRestart extends MiddlewareRestart {
boolean p;

public TomcatRestart(boolean parameter){
    p=parameter;
}
@Override
void stop() {
    System.out.println("tomcat:停止中");
}

void renameLog() {
    System.out.println("tomcat:备份修改日志名称");
}

@Override
void start() {
    System.out.println("tomcat:启动中");
}

/* (non-Javadoc)
 * @see com.middleware.restart.MiddlewareRestart#isrun()
 */
@Override
void isrun() {
    System.out.println("tomcat:验证启动正常");
}
/**
*p 为true,收集线程信息,为false不收集线程信息
*/
@Override
boolean execGetThread(){
    return p;
}

}

测试类:
public class TomcatRestartTest {

/** 

 * @方法: main 

 * @描述: TODO(这里用一句话描述这个方法的作用) 

 * @参数 @param args    设定文件 

 * @返回类型 void    返回类型 

 * @抛出异常

 */
public static void main(String[] args) {
System.out.println("-----------------tomcat正常启动");
MiddlewareRestart m = new   TomcatRestart(false);
m.restart();

System.out.println("-----------------tomcat故障启动");
MiddlewareRestart m1 = new  TomcatRestart(true);
m1.restart();

}

}
其他子类如tomcat一样。模式说到底还是一个方法论。业务理清楚了,也许我们不知道模板模式,也能写出这样的模式。

点击查看更多内容
7人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消