概述:抽象類定義了執(zhí)行的方式(一系列步驟或者邏輯搏屑,方案,就是一個(gè)模子)粉楚,子類可以重寫(xiě)父類的具體實(shí)現(xiàn)辣恋,但執(zhí)行還是要使用父類的定義。
代碼:定義一個(gè)下班回家的模版(離開(kāi)公司模软,在路上伟骨,到家開(kāi)門)
package com.example.java8.model.template;
/**
* 模版模式
* 功能:回家(離開(kāi)公司--》在路上--》開(kāi)門)
*/
public abstract class GoHomeTemplate {
/**模版方法(加final避免重寫(xiě))*/
public final void exec(){
this.leaveCompany();
this.onTheWay();
this.openDoor();
}
/**離開(kāi)公司*/
public abstract void leaveCompany();
/**在路上*/
public abstract void onTheWay();
/**開(kāi)門*/
public abstract void openDoor();
}
A方法的實(shí)現(xiàn)模版
package com.example.java8.model.template;
public class AMethod extends GoHomeTemplate {
@Override
public void leaveCompany() {
System.out.println("走電梯");
}
@Override
public void onTheWay() {
System.out.println("坐地鐵");
}
@Override
public void openDoor() {
System.out.println("刷門禁卡");
}
}
B方法的實(shí)現(xiàn)模版
package com.example.java8.model.template;
public class BMethod extends GoHomeTemplate {
@Override
public void leaveCompany() {
System.out.println("走樓梯");
}
@Override
public void onTheWay() {
System.out.println("開(kāi)小車");
}
@Override
public void openDoor() {
System.out.println("鑰匙開(kāi)門");
}
}
測(cè)試
package com.example.java8.model.template;
import org.junit.Test;
public class TemplateTest {
@Test
public void testA(){
GoHomeTemplate aMethod = new AMethod();
aMethod.exec();
}
@Test
public void testB(){
GoHomeTemplate bMethod = new BMethod();
bMethod.exec();
}
}