Java實現模板方法模式

2021-08-18 12:36:11 字數 1972 閱讀 8580

老師出乙份試卷,列印多份,學生填寫答案即可。

把試題和答案分享,抽象出分類,讓子類繼承,公共試題**寫在父類類中,即可。

但是這樣的話,學生子類中還是有重複的**,比如base.testquestion1()等等。

所有重複的**都應該要上公升到父類去,而不是讓每個子類都去重複。

場景

當我們完成某一細節層次一直的乙個過程或一系列步驟,但個別步驟在更詳細層次上的實現可能不同時,通常考慮用模板方法模式處理。

實現

在父類變化的地方,加乙個抽象方法,子類實現這個抽象方法,將變化的邏輯寫入這個方法中。

//父類中的方法

public

class

test*****

//給繼承的子類重寫,每個人答案都是不同的

protected

abstract string answer1();

}

子類實現很簡單,重寫抽象方法,其他不用管

class test*****a extends test***** 

protected string answer2()

}//...可以有多個學生繼承

客戶端

public

static

void

main(string args)

即使更多學生案卷,也只是在選擇答案,這是每個人試卷的唯一不同。

但是除了學生填寫的選項不同之外,還是每個人的姓名也是不同的。要做到最大復用。

定義

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

abstractclass是抽象類,也就是一抽象模板,定義並實現了乙個模板方法。模板方法是乙個具體方法,給出了乙個頂級邏輯的骨架,而邏輯組成步驟在相應的抽象方法中,推遲到子類實現。

public

abstract

class

abstractclass

}

concreteclass,實現父類定義的乙個或多個抽象方法,concreteclass可以有多個,每乙個實現的抽象方法內部邏輯各不相同。

public

class

concreteclassa

extends

abstractclass

@override

public

void

operation2()

}//...不同的concreteclass

客戶端呼叫

public

static

void

main(string args)

通過把不變行為搬移到父類,去除子類中的重複**體現優勢。

模板方法模式提供了很好的**復用平台。

幫助子類擺脫重複的不變行為的糾纏。

Java 模板方法模式

定義 定義乙個操作中的演算法框架,而將一些步驟延遲到子類中。使得子類可以不改變演算法結構的情況重新定義演算法的步驟。優點 封裝不變部分,擴充套件可變部分。行為由父類控制,子類實現。缺點 子類的執行結果對父類有影響。抽象模板類 public abstract class increment 具體模板類...

java 模板方法模式

需求 獲取一段程式的執行時間 原理 獲取程式開始和結束的時間並相減即可 當 完成優化後,就可以解決這類問題 這種方式,模板方法設計模式 什麼事判方法呢?在定義功能是,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分 那麼這是就將不確定的部分暴露出去,由該類的子類去完成 a...

JAVA 模板方法模式

碰到的問題 有些時候,我們在寫 時,有些功能是重複使用的,或者說,不同的類中都有實現某一方法,這時,可以考慮 模板方法模式 把需要的功能寫成乙個模板,把不同的部分在子類中覆蓋掉就行了。模板abstract class gettime public abstract void runcode 子類cl...