設計模式(二十二)模板模式

2021-09-08 11:40:02 字數 2871 閱讀 5898

在模板模式(template pattern)中,乙個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。

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

主要解決:一些方法通用,卻在每乙個子類都重新寫了這一方法。

何時使用:有一些通用的方法。

如何解決:將這些通用演算法抽象出來。

關鍵**:在抽象類實現,其他步驟在子類實現。

應用例項: 1、在造房子的時候,地基、走線、水管都一樣,只有在建築的後期才有加壁櫥加柵欄等差異。 2、西遊記裡面菩薩定好的 81 難,這就是乙個頂層的邏輯骨架。 3、spring 中對 hibernate 的支援,將一些已經定好的方法封裝起來,比如開啟事務、獲取 session、關閉 session 等,程式設計師不重複寫那些已經規範好的**,直接丟乙個實體就可以儲存。

優點: 1、封裝不變部分,擴充套件可變部分。 2、提取公共**,便於維護。 3、行為由父類控制,子類實現。

缺點:每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,使得系統更加龐大。

使用場景: 1、有多個子類共有的方法,且邏輯相同。 2、重要的、複雜的方法,可以考慮作為模板方法。

我們將建立乙個定義操作的 game 抽象類,其中,模板方法設定為 final,這樣它就不會被重寫。cricket 和 football 是擴充套件了 game 的實體類,它們重寫了抽象類的方法。

templatepatterndemo,我們的演示類使用 game 來演示模板模式的用法。

建立乙個抽象類,它的模板方法被設定為 final。

package demo01.template;

/** * @description:

* @author: lay

* @date: created in 19:05 2018/12/12

* @modified by:intellij idea

*/public

abstract

class

game

}

建立擴充套件了上述類的實體類。

package demo01.template.impl;

import demo01.template.game;

/** * @description:

* @author: lay

* @date: created in 19:08 2018/12/12

* @modified by:intellij idea

*/public

class

cricket

extends

game

@override

public

void

initialize()

@override

public

void

startplay()

}

package demo01.template.impl;

import demo01.template.game;

/** * @description:

* @author: lay

* @date: created in 19:11 2018/12/12

* @modified by:intellij idea

*/public

class

football

extends

game

@override

public

void

initialize()

@override

public

void

startplay()

}

使用 game 的模板方法 play() 來演示遊戲的定義方式。

package demo01;

import demo01.template.game;

import demo01.template.impl.cricket;

import demo01.template.impl.football;

/** * @description:

* @author: lay

* @date: created in 19:11 2018/12/12

* @modified by:intellij idea

*/public

class

templatepatterndemo

}

執行程式,輸出結果:

cricket game initialized! start playing.

cricket game started. enjoy the game!

cricket game finished!

football game initialized! start playing.

football game started. enjoy the game!

football game finished!

設計模式(二十二) 策略模式

有時候物件需要按照某種策略改變行為,我們可以利用策略模式,將策略或演算法提取出來,作為單獨的類實現。使用策略模式,可以讓具體演算法和應用物件分離,方便的根據不同條件替換策略。下面舉乙個例子。我們有乙個計算器,它會按照快和慢兩種策略來計算結果。所以我們可以將策略封裝起來。public inte ce ...

小話設計模式(二十二)模板方法模式

模板方法適用於以下情況 1 一次性實現乙個演算法的固定部分,並將可變行為留給子類實現。2 各個子類中公共的行為應該被提取出來並集中到乙個公共的父類中用以避免 重複。3 控制子類擴充套件,父類提供了預設的方法,子類可以在必要時進行擴充套件。模板方法模式一種特別常用的模式,你可能在程式設計過程中無意中就...

狀態模式 java設計模式(二十二)

共享狀態 優缺點和適用範圍 jdk中的應用 狀態模式 state pattern 允許乙個物件在內部狀態改變時改變行為,看起來似乎修改了類。狀態模式結構。狀態轉換可以由環境類統一負責。新增具體狀態需要修改環境類。public void changestate else if value 1 publ...