介紹
模闆模式(Template Pattern)定義一個操作中的算法的架構,而将一些步驟延遲到子類中,使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
優缺點
優點
1.封裝不變部分,擴充可變部分
2.提取公共代碼,便于維護
3.行為由父類控制,子類實作
缺點
每一個不同的實作都需要一個子類來實作,導緻類的個數增加,使得系統更加龐大。
使用場景
1.有多個子類共有的方法,且邏輯相同。
2.重要的、複雜的方法,可以考慮作為模闆方法
3.重構時,模闆方法是一個經常使用的模闆,把相同的代碼抽取到父類中,然後通過構造函數限制某行為
舉例
打開計算機的整個過程,首先啟動計算機電源,計算機檢測自身狀态沒有問題時将進入作業系統,對使用者進行驗證之後即可登入計算機,下面使用模闆方法來模拟一下這個過程:
抽象Computer類
public abstract class AbstractComputer {
protected void powerOn(){
System.out.println("開啟電源");
}
protected void checkHardware(){
System.out.println("硬體檢查");
}
protected void loadOS(){
System.out.println("載入作業系統");
}
protected void login(){
System.out.println("小白的計算機無驗證,直接進入系統");
}
public void startUp(){
System.out.println("開機 start");
powerOn();
checkHardware();
loadOS();
login();
System.out.println("關機 end");
}
}
程式員計算機類
public class CoderComputer extends AbstractComputer{
@Override
protected void login() {
System.out.println("程式員隻需要進行使用者和密碼驗證就可以了");
}
}
軍用計算機類
public class MilitaryComputer extends AbstractComputer{
@Override
protected void checkHardware() {
super.checkHardware();
System.out.println("檢查硬體防火牆");
}
@Override
protected void login() {
System.out.println("進行指紋識别等複雜的使用者驗證");
}
}
測試類
public class Test {
public static void main(String[] args) {
AbstractComputer computer = new CoderComputer();
computer.startUp();
computer = new MilitaryComputer();
computer.startUp();
}
}