模板方法之前push的发送过程和歌单抓取, 还有spring源码和AQS中都有使用到。
我觉得思想就是在抽象类中定义一个模板(里面再定义几个方法的的执行步骤), 然后这几个方法可以留给子类去拓展。我以歌单抓取的过程来写代码。
public abstract class AbstractSongCrawler {
public final void doWork() {
getSongs();
dealSongs();
}
protected abstract void getSongs();
protected void dealSongs() {
System.out.println("歌曲正在入库");
}
}
public class QqSongCrawler extends AbstractSongCrawler {
@Override
protected void getSongs() {
System.out.println("正在从qq来赚取歌曲");
}
}
public class WangYiSongCrawler extends AbstractSongCrawler {
@Override
protected void getSongs() {
System.out.println("正在从网易云抓取歌");
}
}
public class Test {
public static void main(String[] args) {
AbstractSongCrawler qq = new QqSongCrawler();
AbstractSongCrawler wangyi = new WangYiSongCrawler();
wangyi.doWork();
qq.doWork();
}
}
输出结果
正在从网易云抓取歌
歌曲正在入库
正在从qq来赚取歌曲
歌曲正在入库