[设计模式] ------ 模板模式
生活随笔
收集整理的這篇文章主要介紹了
[设计模式] ------ 模板模式
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模板模式
模板模式,定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類(lèi)中,模板方法使得子類(lèi)可以不改變一個(gè)算法的結(jié)構(gòu),就可以重定義該算法的某些特定步驟
一般是定義一個(gè)抽象類(lèi),有抽象方法,有骨架方法,骨架方法中會(huì)定義這幾個(gè)抽象方法的調(diào)用順序。
然后再定義多個(gè)實(shí)現(xiàn)類(lèi),繼承這個(gè)抽象類(lèi),那么就得覆蓋父類(lèi)的抽象方法,那么每個(gè)實(shí)現(xiàn)類(lèi)調(diào)用骨架方法,最終的結(jié)構(gòu)就是按照父類(lèi)中預(yù)先定義好的調(diào)用順序,去調(diào)用自己實(shí)現(xiàn)的各個(gè)抽象方法。這就是效果
舉個(gè)網(wǎng)上的例子,我覺(jué)得寫(xiě)的挺通俗易懂的:
/***這個(gè)抽象類(lèi),有三個(gè)抽象方法(initGame,startGame,endGame),*一個(gè)骨架方法playGame,*骨架方法中主要就是定義了三個(gè)抽象方法的執(zhí)行順序*/ public abstract class GameTemplate {/** 初始化游戲 */abstract void initGame();/** 開(kāi)始游戲 */abstract void startGame();/** 結(jié)束游戲 */abstract void endGame();public final void playGame() {initGame();startGame();endGame();} } /*** 亡者農(nóng)藥,分別實(shí)現(xiàn)三個(gè)抽象方法,自己具體實(shí)現(xiàn)*/ public class GloryOfKings extends GameTemplate {@Overridevoid initGame() {System.out.println("初始化亡者農(nóng)藥");}@Overridevoid startGame() {System.out.println("開(kāi)始亡者農(nóng)藥");}@Overridevoid endGame() {System.out.println("結(jié)束亡者農(nóng)藥");} } /*** LOL,也分別實(shí)現(xiàn)三個(gè)抽象方法,自己具體實(shí)現(xiàn)*/ public class LOL extends GameTemplate {@Overridevoid initGame() {System.out.println("初始化LOL");}@Overridevoid startGame() {System.out.println("開(kāi)始LOL");}@Overridevoid endGame() {System.out.println("結(jié)束LOL");} } /*** 測(cè)試,分別拿到兩個(gè)子類(lèi),去調(diào)用骨架方法playGame* 那么最終的結(jié)果就是兩個(gè)子類(lèi)各自實(shí)現(xiàn)的三個(gè)抽象方法,* 都會(huì)按照父抽象類(lèi)中骨架定義的執(zhí)行順序依次執(zhí)行* * 子類(lèi)在實(shí)現(xiàn)的過(guò)程中沒(méi)有必要定義這些執(zhí)行順序,因?yàn)樵诟割?lèi)中都做好了*/ public static void main(String[] args) {GameTemplate gloryOfKings = new GloryOfKings();gloryOfKings.playGame();GameTemplate lol = new LOL();lol.playGame(); }總結(jié)
以上是生活随笔為你收集整理的[设计模式] ------ 模板模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: verilog异步复位jk触发器_Ver
- 下一篇: CoreAnimation编程指南(十)