設計模式 Template Method模式

2021-08-19 00:19:19 字數 1775 閱讀 7413

template method 模式是帶有模板功能的模式,組成模板的方法被定義在父類中。由於這些方法是抽象方法,所以只檢視父類的**是無法知道這些方法最終會進行何種具體處理的,唯一能知道的就是父類是如何呼叫這些方法的。

實現上述這些抽象方法的是子類。在子類中實現了抽象方法也就決定了具體的處理。也就是說,只要在不同的子類中實現不同的具體處理,當父類的模板方法被呼叫時程式行為也會不同。但是,不論子類中的具體實現如何,處理的流程都會按照父類中所定義的那樣進行。

像這樣在父類中定義處理流程的框架,在子類中實現具體處理的模式就稱為template method模式。

這裡的示例程式是一段將字元和字串迴圈顯示5次的簡單程式。

名字說明

abstractdisplay

只實現了display方法的抽象類

chardisplay

實現了open,print,close方法的類

stringdisplay

實現了open,print,close方法的類

main

測試程式行為的類

public abstract class abstractdisplay 

close(); // …最後關閉。這就是display方法所實現的功能

}}

public class chardisplay extends abstractdisplay 

@override

public void open()

@override

public void print()

@override

public void close()

}

public class stringdisplay extends abstractdisplay 

@override

public void open()

@override

public void print()

@override

public void close()

private void printline() {

system.out.print("+");

for(int i=0;i示例輸出如下:

<>

+-------------+

|hello, world.|

|hello, world.|

|hello, world.|

|hello, world.|

|hello, world.|

+-------------+

##template method模式中的角色

abstractclass角色不僅負責實現模板方法,還負責宣告在模板方法中所使用到的抽象方法。這些抽象方法由子類concreteclas角色負責實現。在示例程式中,由abstractdisplay類扮演此角色。

該角色負責具體實現abstractclass角色中定義的抽象方法。這裡實現的方法將會在abstractclass角色的模板方法中被呼叫。在示例程式中,由chardisplay類和stringdisplay類扮演此角色。

##template method模式的思路

使用template method模式的優點是由於在父類的模板方法中編寫了演算法,因此無需在每個子類中再編寫演算法。而且如果在模板方法中發現bug時,只需要修改模板方法即可解決問題。

設計模式總結

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 9 設計模式

文章 head first 第一章 head first 設計模式讀書筆記 1 策略模式 觀察者模式 head first設計模式學習2 裝飾者模式 head first 設計模式3 工廠模式 head first設計模式4 命令模式 head first 設計模式5 介面卡模式和外觀模式 head...