学习、梳理设计模式。
模版方法模式
模版方法模式,以继承的方式来实现,提升代码的复用性,适合具有相同或相似的步骤的逻辑处理。
由抽象基类和具体子类来具体实现。
抽象基类
具体的逻辑抽象为几个步骤,具有相同步骤的可以抽象为基本方法,不同的可以抽象为抽象方法,对于有个性化需求的(比如不是所有步骤都需要的)可以用钩子来进行控制,最后是组合这些步骤的模版方法。
- 基本方法
- 抽象方法
- 可选钩子(Hook)
- 模版方法(final)
/**
* 宠物基类
*/
public abstract class AbstracthPet {
/**
* 喂食
*/
public final void feedingTemplate() {
//1.
buyFood();
//2.
cook();
//3.
pourInDish();
if (isAddMilk()) {
//4.
addMilk();
}
}
protected boolean isAddMilk() {
return true;
}
private void buyFood() {
System.out.println("1. 买粮");
}
protected abstract void cook();
private void pourInDish() {
System.out.println("3. 倒入盘子");
}
private void addMilk() {
System.out.println("4. 加牛奶");
}
}
具体子类
实现抽象基类的抽象方法,有个性化需求的可以覆盖钩子。
- 实现基类抽象方法
- 覆盖钩子(可选)
public class Cat extends AbstracthPet {
@Override
protected void cook() {
System.out.println("2. 做猫食");
}
@Override
protected boolean isAddMilk() {
return false;
}
}
跑下看看结果
代码语言:javascript复制public class CatTest {
public static void main(String[] args) {
Cat coffee = new Cat();
coffee.feedingTemplate();
}
}
- 买粮
- 做猫食
- 倒入盘子