JAVA設計模式之 模板方法模式

2021-07-08 21:11:39 字數 1850 閱讀 8779

我們在生活中,很多事情都包含特定的一些步驟。如去銀行辦理業務,通常步驟的次序是:取號 –> 填單 –> 等待叫號–>辦理業務。這幾個步驟中,有的是不變的,比如取號,每個人都要取,但有的是要變的,比如都有填單,但是根據不同的業務,填寫的單據不同。又比如我們外出吃飯,一般的步驟是:點餐–>等待–>吃飯–>付錢,也能發現同樣的規律。這樣的事情數不勝數。

專案開發中,也可能遇到這樣的情況,多個功能模組,可能有相似或相同的操作步驟,只是其中某一環節或某乙個步驟不相同,我們就可以抽取乙個或多個公用的父類(模板),讓子類實現具體的方法。我們以去銀行辦理業務為例:

模擬抽象類:

/**

* 模板方法模式的模板框架(以去銀行辦理業務為例)

* @description:

*/ public abstract class templetbankframe

/* 第三步:等待工作人員叫號* */

waitcall();

/* 第四步:辦理業務* */

handlecard();

}

/* 取號步驟是不需要更改的,所以我們用private修飾* */

private void takenumber()

/* 辦理的業務不同,填寫的內容不同,所以我們用protected修飾,讓子類去處理具體業務* */

protected abstract void writebill();

/* 等待叫號步驟也是不需要更改的,所以我們用private修飾* */

private void waitcall()

/* 辦理的業務不同,用protected修飾,讓子類去處理具體業務* */

protected abstract void handlecard();

/*定義乙個鉤子方法:由抽象類宣告並實現,而子類會加以擴充套件。通常抽象類給出的實現是乙個空實現,作為方法的預設實現。**/

protected abstract boolean isneedthismethod();

}

———具體實現類:如辦理取錢————————

/**

* 辦理取錢業務

* @description:

*/ public class getmoney extends templetbankframe

@override

protected void handlecard()

@override

protected boolean isneedthismethod() }

————具體實現類:如我是去辦銀行卡————————-

/**

* 辦理銀行卡

* @description:

*/ public class tackcard extends templetbankframe

@override

protected void handlecard()

@override

protected boolean isneedthismethod() }

———–測試類———————–

/**

* 模板方法模式測試類

* @description:

*/ public class test

}最後的輸出結果:

辦理銀行業務請取號!

我已經填寫過單子,今天就直接等待叫號了吧!

辦理銀行業務請取號!

我要取500萬大洋

———–分隔線—————-

辦理銀行業務請取號!

我填寫的是辦理銀行卡單據

辦理銀行業務請取號!

我在辦卡,即將完成!

設計模式 Java設計模式之模板方法模式

本文源自 人生之旅 諳憶的部落格 我們先這樣來想象乙個生活中的場景,就是我們在銀行櫃檯進行辦理業務的時候,會進行這幾步 step1 進門取號 step2 填寫單據 step3 等待叫號 step4 視窗辦理 在這裡,無論是你我還是他 她,都會遵循這個模板進行業務的辦理!我們具體看step2,銀行是無...

Java設計模式之 模板方法模式

在物件導向開發過程中,通常會遇到這樣的乙個問題,我們知道乙個演算法所需的關鍵步驟,並確定了這些步驟的執行順序,但是,某些步驟的具體實現是未知的,或者說某些步驟的實現是會隨著環境的變化而改變的,例如,執行程式的流程大致如下 對於不同的程式語言,上述 4 個步驟都是不一樣的,但是,它們的執行流程是固定的...

java設計模式之模板方法模式

模板方法模式 和策略模式類似 通過抽象類定義乙個抽象方法和非抽象方法 子類繼承抽象類後實現抽象方法 通過改變抽象類的引入來改變呼叫的方法 將方法都放在抽象類中最好還是面向介面程式設計public abstract class abstractcalculator abstract public in...