模板模式:Template-Method
故事:
帅哥:“每天都在加班,我已经很久没有看见日落了。生活真的是太苦逼了,每天都是这样两点一线,很少有自由的时间可以支配啊。生活的作息就是被安排好的模板,没有一点意外啊。”
美女:“我上班可没你这么惨,我每天朝九晚五,自由时间还是比较充足的。”
类图:
代码:
/**
* @author 康康的远方
* @date 2021/4/5
*/
public abstract class WorkingDay {
public final void startWorking(){
System.out.println("早上8:30点上班");
}
public final void lunchTime(){
System.out.println("午饭时间都是11:30-13:30");
}
public abstract void offDuty();
public final void oneDay(){
System.out.println("一天的工作开始了:");
startWorking();
lunchTime();
offDuty();
}
}
思考:当一套处理流程已经确定时,我们可以使用模板方法。通用公共的方法可以直接在抽象类中实现,不同的方法交给子类自己去实现。模板方法是站在父类的角度去考虑问题,处理的流程在父类中已经确定。在程序运行的时候,无论是哪个子类都可以替换父类—里氏替换原则。
/**
* 美女的一天
* @author 康康的远方
* @date 2021/4/5
*/
public class BeautyWorkingDay extends WorkingDay {
@Override
public void offDuty() {
System.out.println("美女每天五点下班!");
}
}
/**
* 帅哥苦逼的一天
* @author 康康的远方
* @date 2021/4/5
*/
public class HandSomeWorkingDay extends WorkingDay {
@Override
public void offDuty() {
System.out.println("帅哥每天加班到晚上九点,真的好累啊!");
}
}
/**
* @author 康康的远方
* @date 2021/4/5
*/
public class WorkingDayTemplate {
public static void main(String[] args) {
BeautyWorkingDay beauty = new BeautyWorkingDay();
beauty.oneDay();
System.out.println("---------------");
HandSomeWorkingDay handSomeWorkingDay = new HandSomeWorkingDay();
handSomeWorkingDay.oneDay();
}
}
//执行程序结果输出...............
一天的工作开始了:
早上8:30点上班
午饭时间都是11:30-13:30
美女每天五点下班!
---------------
一天的工作开始了:
早上8:30点上班
午饭时间都是11:30-13:30
帅哥每天加班到晚上九点,真的好累啊!
思考:
从上面可以看出,父类实现的方法越多,子类越轻松;但是父类实现的越多,子类的灵活性也较低了。说到底大家都是打工人。