Golang - Design Pattern #7: 模板方法模式 (Template Method)

更新於 發佈於 閱讀時間約 2 分鐘
raw-image


模板方法模式:就像做麵包的食譜!


大家好!今天我們來談談模板方法模式(Template Method)。它有點像給你一份麵包的食譜,告訴你該怎麼混合、發酵和烘焙,但是具體的材料和調味料,就交給你自己去選擇和調整。它定義了一個演算法的步驟,但留下了一些具體的實現讓子類去完成。


讓我們深入探討一下

模板方法模式的核心是一個方法,這個方法將算法定義為一系列的步驟,其中一些步驟是由子類來具體實現的。這樣,你可以改變算法的具體實現,而不改變算法結構。


Go 的時間!

想像一下,你正在設計一個工作流程系統,每個工作流程都有 開始執行結束 的步驟。但每個工作流程的 執行 細節都不同:

package main

import "fmt"

// 定義工作流程的接口
type Workflow interface {
Start()
Execute()
End()
Run()
}

// 模板方法實現在基礎流程中
type BaseWorkflow struct{}

func (b *BaseWorkflow) Start() {
fmt.Println("工作流程開始")
}

func (b *BaseWorkflow) End() {
fmt.Println("工作流程結束")
}

func (b *BaseWorkflow) Run() {
b.Start()
b.Execute()
b.End()
}

// 第一個具體的工作流程
type ReportWorkflow struct {
BaseWorkflow
}

func (r *ReportWorkflow) Execute() {
fmt.Println("執行報告生成流程")
}

// 第二個具體的工作流程
type AuditWorkflow struct {
BaseWorkflow
}

func (a *AuditWorkflow) Execute() {
fmt.Println("執行審核流程")
}

func main() {
report := &ReportWorkflow{}
report.Run()

audit := &AuditWorkflow{}
audit.Run()
}

運行這個程式,你會看到每個工作流程都會 開始執行結束,但 執行 的部分是根據具體的工作流程來定義的。


總結

模板方法模式就像我們日常生活中的食譜,提供了一個基本的指南,但留下一些空間讓我們可以進行調整。它確保了一致性,同時也提供了靈活性。下次當你需要一個有結構但又具有某種程度的自定義空間的算法時,不妨試試這個模式!

留言
avatar-img
留言分享你的想法!
FaShaun Lin-avatar-img
2023/12/01
Compile error
avatar-img
KH Huang的沙龍
36會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
KH Huang的沙龍的其他內容
2023/09/06
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
2023/09/06
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
2023/09/03
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
2023/09/03
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
2023/09/03
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
2023/09/03
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
👨‍💻簡介 套件(Package)在Golang中扮演著組織和管理程式碼的重要角色。 package就像工具箱一樣,裡面裝滿各種不同的工具,每個工具都有特定的功能。這些工具能夠幫助你完成不同的任務,從修理家具到蓋小屋,樣樣都行。
Thumbnail
👨‍💻簡介 套件(Package)在Golang中扮演著組織和管理程式碼的重要角色。 package就像工具箱一樣,裡面裝滿各種不同的工具,每個工具都有特定的功能。這些工具能夠幫助你完成不同的任務,從修理家具到蓋小屋,樣樣都行。
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
創建物件有時是一個資源密集型和耗時的過程,尤其是當涉及到從資料庫或其他來源初始化物件時。原型模式就是為了解決這種問題🔧,它提供了一種方法,能夠通過複製一個已存在的物件來迅速創建新物件,而不是從頭開始。
Thumbnail
創建物件有時是一個資源密集型和耗時的過程,尤其是當涉及到從資料庫或其他來源初始化物件時。原型模式就是為了解決這種問題🔧,它提供了一種方法,能夠通過複製一個已存在的物件來迅速創建新物件,而不是從頭開始。
Thumbnail
大家好!今天我們來談談模板方法模式(Template Method)。它有點像給你一份麵包的食譜,告訴你該怎麼混合、發酵和烘焙,但是具體的材料和調味料,就交給你自己去選擇和調整。它定義了一個演算法的步驟,但留下了一些具體的實現讓子類去完成。
Thumbnail
大家好!今天我們來談談模板方法模式(Template Method)。它有點像給你一份麵包的食譜,告訴你該怎麼混合、發酵和烘焙,但是具體的材料和調味料,就交給你自己去選擇和調整。它定義了一個演算法的步驟,但留下了一些具體的實現讓子類去完成。
Thumbnail
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
Thumbnail
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News