1. 程式人生 > >設計模式 --- 模版方法模式

設計模式 --- 模版方法模式

1.定義

定義一個操作中的演算法框架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

 

2.使用場景

1。多個子類公有的方法並且邏輯相同

2。重要、複雜的演算法,可以把核心演算法設計為模版,周邊的相關細節功能則由各個子類實現。

3。重構時,模版方法模式是常用的模式,把相同的程式碼抽取到父類中,然後通過鉤子函式約束行為。

 

3.簡單實現

模版方法實際上是封裝一個固定的流程,以一個電腦開機的動作為例,開機的步驟是相對固定的,先啟動電源,在檢測硬體系統是否正常,再進入作業系統,再驗證使用者資訊登陸。

//定義固定的流程
abstract class AbstractComputer{
    protected void poweron(){
        System.out.println("電源開啟");
    }
    protected void checkHaredware(){
        System.out.println("檢查硬體");
    }
    protected void loadOS(){
        System.out.println("裝載OS系統");
    }
    protected void login(){
        System.out.println("使用者檢查,登陸");
    }

    //開機的方法
    public final void startUp(){
        System.out.println("----開機----");
        poweron();
        checkHaredware();
        loadOS();
        login();
    }
}

//普通計算機
class NormalComputer extends AbstractComputer{
    @Override
    protected void login() {
        System.out.println("普通電腦 輸入賬號密碼 登陸");
    }
}

//軍用電腦
class MilitaryComputer extends AbstractComputer{
    @Override
    protected void checkHaredware() {
        System.out.println("軍用電腦 需檢查防火牆");
    }

    @Override
    protected void login() {
        System.out.println("人臉識別 指紋識別驗證");
    }
}


public class TemplateMode {

    public static void main(String[] args){
        NormalComputer normalComputer = new NormalComputer();
        normalComputer.startUp();
        
        MilitaryComputer militaryComputer = new MilitaryComputer();
        militaryComputer.startUp();
    }

}

輸出:

 

4.小結

優點:

封裝不變部分,拓展可變部分,提取公共部分程式碼,便於維護

缺點:

增加程式碼閱讀的難度