1. 背景
源于好莱坞原则
假设现在需要做饭,买菜,洗菜,做饭,是固定的三步,具体张三怎么做,李四怎么做,自主实现;类似于这种流程类,且固定流程的,可以采用模板模式;
2. 实现
2.1 抽象类-做饭
/**
* 做饭: 买菜,洗菜,做饭
*
* @author wql
* @date 2022/3/27 17:36
*/
public abstract class Cook {
/**
* 固定三步: 买菜,洗菜,做饭,可选的play
*/
public final void cook() {
maicai();
xicai();
zuofan();
play();
}
protected abstract void maicai();
protected abstract void zuofan();
protected abstract void xicai();
public void play() {
//默认空实现,类似于钩子函数
}
}
2.2 实现类-张三做饭
/**
* 张三做饭
*
* @author wql
* @date 2022/3/27 17:39
*/
public class ZhanSanCook extends Cook {
@Override
protected void maicai() {
//todo
}
@Override
protected void zuofan() {
//todo
}
@Override
protected void xicai() {
//todo
}
}
2.3 实现类-李四做饭
/**
* 李四做饭
*
* @author wql
* @date 2022/3/27 17:39
*/
public class LiSiCook extends Cook {
@Override
protected void maicai() {
//todo
}
@Override
protected void zuofan() {
//todo
}
@Override
protected void xicai() {
//todo
}
}
2.4 测试
采用多态
/**
* @author wql
* @date 2022/3/27 17:47
*/
public class TestCook {
public static void main(String[] args) {
Cook cook = new ZhanSanCook();
cook.cook();
}
}
是不是超级简单!