定義一個(gè)操作中的算法骨架,將算法的一些步驟延遲到子類中,使得子類在可以不改變?cè)撍惴ńY(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
package com.strife.pattern.template;
/**
* 模板方法設(shè)計(jì)模式
*
* @author mengzhenghao
* @date 2022/6/1
*/
public class Template {
public static void main(String[] args) {
AbstractSoftwareDevelop softwareDevelop = new ConcreteAppDevelop();
softwareDevelop.templateMethod();
}
}
/** 軟件開發(fā)抽象 */
abstract class AbstractSoftwareDevelop {
public void templateMethod(){
//調(diào)用基本方法
doBiz();
doProduct();
doDevelop();
doTest();
comparison();
}
protected void doBiz(){
System.out.println("需求分析");
}
protected abstract void doProduct();
protected abstract void doDevelop();
protected abstract void doTest();
/** 鉤子方法 */
protected void comparison() {
}
}
/** APP開發(fā)具體類 */
class ConcreteAppDevelop extends AbstractSoftwareDevelop {
@Override
public void doProduct() {
System.out.println("輸出App產(chǎn)品");
}
@Override
public void doDevelop() {
System.out.println("進(jìn)行App開發(fā)");
}
@Override
public void doTest() {
System.out.println("進(jìn)行App測(cè)試");
}
/** 覆蓋鉤子方法 */
@Override
protected void comparison() {
System.out.println("參加評(píng)比");
}
}