模板方法模式

定义

定义一个操作中的算法框架,而将一些步骤延迟到子类中吗,让子类可以不改变算法的结构的既可以重定义该算法的特定步骤

使用场景

1.一个子类有共有的方法,并且逻辑基本相同
2.重要,复杂的算法可以把核心算法设计为一个模板方法,周边的相关细节功能由各个子类去实现
3.重构的时候,模板方法模式是一个经常使用的模式,吧相同的代码抽取到父类中,然后通过钩子函数约束行为

UML图

在这里插入图片描述
AbsTemplate定义了一个算法框架
ConcreteImplA 具体实现类A
ConcreteImplB 具体实现类B

代码实现

public abstract class AbstractComputer {
    protected void powerOn() {
        System.out.println("开启电源");
    }
    protected void checkHardware() {
        System.out.println("硬件检查");
    }
    protected void loadOs() {
        System.out.println("载入操作系统");
    }
    protected void login() {
        System.out.println("小白的计算机,不需要密码直接进入");
    }
    protected void startUp() {
        System.out.println("开机 start");
        powerOn();
        checkHardware();
        loadOs();
        login();
        System.out.println("开机结束 end");
    }
}
public class CoderComputer extends AbstractComputer {
    @Override
    protected void login() {
        super.login();
        System.out.println("程序员只需要进行用户和密码验证就可以了");
    }
}
public class MilitartyComputer extends AbstractComputer {
    @Override
    protected void login() {
        super.login();
        System.out.println("进行指纹识别等复杂的用户验证");
    }
    @Override
    protected void checkHardware() {
        super.checkHardware();
        System.out.println("检查硬件的防火墙");
    }
}

总结

模板方法模式用四个字概括就是:流程封装,也就是把某个固定的流程封装到一个final方法,并且让子类能定制这个流程中的某些方法或者步骤,这就要求提取公共的代码,提升代码的复用率,同事也带来更好的可扩展性。

优点
封装部分不变的,扩展可变的,提取公共的部分代码,便于维护

缺点
模板方法会带来代码的阅读性的难度,会让用户觉得难以理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值