java面试题网站:www.javaoffers.com
模板方法: 提前定义好的一套/一组具有逻辑顺序的动作.
去喝水案例 : 1 拿起杯子, 2 喝水, 3 放下杯子. 每个人的喝水习惯有可能不同, 比如A喜欢用玻璃杯, B喜欢用保温杯, A喜欢喝可乐,B喜欢喝温水,A喜欢把杯子放在自己的左边, B喜欢把杯子放在自己的右边. 所以模板方法通常是对一组具有逻辑顺序动作的抽象提取.
类:
public abstract class WantWater {
public void toWantWater(){
pickUpCap();
doWater();
putDownCap();
}
public abstract void pickUpCap();//拿起杯子
public abstract void doWater();//开始喝水
public abstract void putDownCap();//放下杯子
}
public class PersonA extends WantWater {
@Override
public void pickUpCap() {
LOGUtils.printLog("PersonA拿起装满可乐的玻璃杯");
}
@Override
public void doWater() {
LOGUtils.printLog("PersonA开始喝可乐");
}
@Override
public void putDownCap() {
LOGUtils.printLog("PersonA喝完把杯子放在自己的左手边");
}
}
public class PersonB extends WantWater {
@Override
public void pickUpCap() {
LOGUtils.printLog("PersonB拿起装满温水的保温杯");
}
@Override
public void doWater() {
LOGUtils.printLog("PersonB开始喝温水");
}
@Override
public void putDownCap() {
LOGUtils.printLog("PersonB喝完把保温杯放在自己的右手边");
}
}
测试
public class WaterTest {
public static void main(String[] args) {
PersonA personA = new PersonA(); //创建PersonA 实例对象
PersonB personB = new PersonB(); //创建PersonB 实例对象
personA.toWantWater(); //去喝水
personB.toWantWater(); //去始喝水
}
}
打印信息
2020-08-23 20:49:28 []-[INFO] PersonA拿起装满可乐的玻璃杯
2020-08-23 20:49:28 []-[INFO] PersonA开始喝可乐
2020-08-23 20:49:28 []-[INFO] PersonA喝完把杯子放在自己的左手边
2020-08-23 20:49:28 []-[INFO] PersonB拿起装满温水的保温杯
2020-08-23 20:49:28 []-[INFO] PersonB开始喝温水
2020-08-23 20:49:28 []-[INFO] PersonB喝完把保温杯放在自己的右手边