模板方法模式詳解

2022-01-11 03:16:14 字數 2087 閱讀 4367

已經很久沒有寫設計模式了。額。。。

本來還想著能多看一點設計模式總結一下呢,然後轉眼已經馬上要到2018了。有點尷尬啊。

不過也算有收穫,畢竟看了別的書籍,也看了一部分spring的原始碼,看起來真是晦澀難懂啊。。。

這次寫這個模板方法模式也是基於看書過程中的一些契機的,那就是同步鎖的一些依賴實現——佇列同步器。

佇列同步器的設定是基於模板設計模式的。

由於本人是也算是個遊戲迷,那就以今年的一款現象級遊戲吃雞(絕地求生)來講解這個模板設計模式吧。

這個遊戲想要成為吃雞(最後的生存者)一般需要經歷以下幾個步驟:匹配到玩家、跳傘、撿垃圾、跑毒圈、吃雞。

上述步驟中:吃雞都是相對固定的步驟了、而匹配到玩家、跳傘、撿垃圾、跑毒圈就是存在可變性的步驟。

好的背景就是這樣,我們的目的是吃雞、上面五個步驟就是我們吃雞的整個過程。

實際上,吃雞這個遊戲的核心就在跑毒圈這個這個過程中。其他過程我們是可以不用太關注的,而吃雞是需要上述過程按照順序排列才能夠實現的,也就是說順序也是固定的,那麼我們這樣設計模型:

public

abstract

class

chijimodel

//大吉大利今晚吃雞/快遞員

final

public

void

chiji()

else}}

構建兩個玩家模型:

public

class godv extends

chijimodel

@override

protected

void

jump()

@override

protected

void

pick()

@override

protected

void

run()

@override

protected

boolean

ischiji()

}

public

class aab extends

chijimodel

@override

protected

void

jump()

@override

protected

void

pick()

@override

protected

void

run()

@override

protected

boolean

ischiji()

}

讓玩家開始吃雞:

public

class

pb }

結果:

模板方法模式包含兩個角色:

抽象類:

用於定義一系列基本操作,有具體的也有抽象的。每乙個基本操作相當於乙個演算法步驟,在抽象類中也有乙個模板方法,是實現定義演算法步驟的框架的。

具體子類:

實現父類的抽象演算法過程,也可以重寫具體演算法過程。

模板方法:

聚合整個演算法步驟的框架。是乙個具體的方法。

在例子中的吃雞明顯就屬於該方法

抽象方法:

在抽象類中沒有實現,在子類中實現的方法,屬於基本方法。

具體方法:

在抽象類中實現了的方法,屬於基本方法。

鉤子方法:

在抽象類中有實現,子類可以重寫,屬於基本方法。

templatemethod()就是模板方法,operation1與operation2就是基本方法。

模板方法是通過彙總或排序基本方法產生的結果集。

模板方法模式:

就是按照乙個規則和順序呼叫基本方法。

具體到我們的例子中去:就是按照chiji()方法規定的順序呼叫本類的其他方法。

實際上你可以通過修改子類的實現來達到修改父類結果的效果。

如果喜歡的話點一波推薦吧,謝謝了。

設計模式詳解(十三) 模板方法模式

使用程式模擬烹飪的整個過程,為了簡化問題,目前只烹飪蔬菜和肉兩種。定義抽象烹飪類,建立兩個子類分別實現蔬菜與肉的烹飪。客戶端測試 public static void main string args 輸出 烹飪開始.準備蔬菜.新增食用油.加生抽 鹽.烹飪結束.烹飪開始.準備肉.肉焯水.新增食用油....

設計模式系列4 詳解模板方法模式

模板方法模式應用場景 模板方法模式優點 模板方法模式缺點 設計模式 飛機票三大工廠模式 登機入口 策略模式 登機入口 委派模式 登機入口 模板方法模式 登機入口 觀察者模式 登機入口 單例模式 登機入口 原型模式 登機入口 模式 登機入口 裝飾者模式 登機入口 介面卡模式 登機入口 建造者模式 登機...

模板方法模式

有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...