Java设计模式之行为型:模板方法模式
一、什么是模板方法模式:
????????模板方法是基于繼承實現的,在抽象父類中聲明一個模板方法,并在模板方法中定義算法的執行步驟(即算法骨架)。在模板方法模式中,可以將子類共性的部分放在父類中實現,而特性的部分延遲到子類中實現,只需將特性部分在父類中聲明成抽象方法即可,使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟,不同的子類可以以不同的方式來實現這些邏輯。
? ? ? ? 模板方法模式的優點在于符合“開閉原則”,也能夠實現代碼復用,將不變的行為轉移到父類,去除子類中的重復代碼。但是缺點是不同的實現都需要定義一個子類,導致類的個數的增加使得系統更加龐大,設計更加抽象。
????????模板方法是一個方法,那么他與普通方法有什么不同呢?模板方法是定義在抽象類中,把基本操作方法組合在一起形成一個總算法或者一組步驟的方法。而普通的方法是實現各個步驟的方法,我們可以認為普通方法是模板方法的一個組成部分。
UML結構圖:
- 抽象類(AbstractClass):實現了模板方法,定義了算法的骨架。
- 具體類(ConcreteClass):實現抽象類中的抽象方法,已完成完整的算法。
二、模式實現:
舉個例子,以準備去學校所要做的工作(prepareGotoSchool)為例,假設需要分三步:穿衣服(dressUp),吃早飯(eatBreakfast),帶上東西(takeThings)。學生和老師要做得具體事情肯定有所區別。
抽象類AbstractClass:
//抽象類定義整個流程骨架 public abstract class AbstractPerson{//模板方法,使用final修改,防止子類改變算法的實現步驟public final void prepareGotoSchool(){dressUp();eatBreakfast();takeThings();}//以下是不同子類根據自身特性完成的具體步驟protected abstract void dressUp();protected abstract void eatBreakfast();protected abstract void takeThings(); }具體類ConcreteClass:
public class Student extends AbstractPerson{@Overrideprotected void dressUp() {System.out.println(“穿校服");}@Overrideprotected void eatBreakfast() {System.out.println(“吃媽媽做好的早飯");}@Overrideprotected void takeThings() {System.out.println(“背書包,帶上家庭作業和紅領巾");} } public class Teacher extends AbstractPerson{@Overrideprotected void dressUp() {System.out.println(“穿工作服");}@Overrideprotected void eatBreakfast() {System.out.println(“做早飯,照顧孩子吃早飯");}@Overrideprotected void takeThings() {System.out.println(“帶上昨晚準備的考卷");} } public class Client {public static void main(String[] args) {Student student = new Student()student.prepareGotoSchool();Teacher teacher = new Teacher()teacher.prepareGotoSchool();} }設計模式系列文章:
Java設計模式之創建型:工廠模式詳解(簡單工廠+工廠方法+抽象工廠)
Java設計模式之創建型:建造者模式
Java設計模式之創建型:單例模式
Java設計模式之創建型:原型模式
Java設計模式之結構型:適配器模式
Java設計模式之結構型:裝飾器模式
Java設計模式之結構型:代理模式
Java設計模式之結構型:橋接模式
Java設計模式之結構型:外觀模式
Java設計模式之結構型:組合模式
Java設計模式之結構型:享元模式
Java設計模式之行為型:策略模式
Java設計模式之行為型:模板方法模式
Java設計模式之行為型:責任鏈模式
Java設計模式之行為型:觀察者模式
Java設計模式之行為型:訪問者模式
Java設計模式之行為型:中介者模式
Java設計模式之行為型:命令模式
Java設計模式之行為型:狀態模式
Java設計模式之行為型:備忘錄模式
Java設計模式之行為型:迭代器模式
Java設計模式之行為型:解釋器模式
參考博客鏈接:
設計模式讀書筆記-----模板方法模式_chenssy 的技術博客-CSDN博客
Java設計模式之模板方法模式(Template Method)_一個本科小生的奮斗史-CSDN博客_java 模板方法
總結
以上是生活随笔為你收集整理的Java设计模式之行为型:模板方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java设计模式之行为型:策略模式
- 下一篇: Java设计模式之行为型:迭代器模式