模版模式&钩子方法

原文地址:https://www.cnblogs.com/gxyandwmm/p/9375843.html
在以下代码例子中是模版模式的设计案例。

模版模式:主要是通过生成一个抽象类,并且实现抽象类子类的一些相同实现的方法 下述例子中的run 方法。这样子类就可以不用实现此方法,就可以调用的一种方式。

钩子方法,是在此基础上做了一些改动,主要是通过实现的另一个方法来对父类方法的执行程序实现修改的方法。在下述例子中,是通过isAlarm方法来修改run方法的执行逻辑。

public abstract class HummerModel {
    protected abstract void start(); //发动
    protected abstract void stop();  //停止
    protected abstract void alarm(); //鸣笛
    protected abstract void engineBoom(); //轰鸣
    final public void run() { //车总归要跑
        this.start();
        this.engineBoom();
        if(this.isAlarm()) {//想让它叫就叫,不想就不叫        
            this.alarm();
        }
        this.stop();
    }
    protected boolean isAlarm() { //我们加了一个判断方法,默认返回true
        return true;
    }
}
public class HummerH1 extends HummerModel {
 
    private boolean alarmFlag = true; //判断标记
    @Override
    public void start() {
        System.out.println("H1发动……");
    }
 
    @Override
    public void stop() {
        System.out.println("H1停止……");
    }
 
    @Override
    public void alarm() {
        System.out.println("H1鸣笛……");
    }
 
    @Override
    public void engineBoom() {
        System.out.println("H1轰鸣……");
    }
    
    @Override
    protected boolean isAlarm() { //覆写isAlarm方法,返回判断标记
        return this.alarmFlag;
    }
    
    public void setAlarm(boolean isAlarm) { //设置判断标记
        this.alarmFlag = isAlarm;
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值