Strategy Design Pattern

更新於 發佈於 閱讀時間約 4 分鐘

簡單來說,其實就是想要完成一件事情,可以使用不同的策略去達成

例如,想要設計一個排序演算法,有氣泡排序、插入排序、快速排序等等多種不同的方法,但是都可以達到一樣的結果。 又或者是搜尋演算法,其實也是一樣的道理。

再舉個例子,在購物網站買東西的付款方式,其實也是一樣,結帳的方式你可以選信用卡、轉帳、貨到付款等等,有很多不同的方式可以達到付款的目的。

以下直接用範例來了解什麼是策略設計模式(Strategy design pattern)。

假如今天我開了一家餐廳,顧客點了一支「烤」雞腿,我們可能會很直覺的這樣寫:

raw-image
raw-image
raw-image

廚房裡面可以煎、烤、炸、蒸食物,乍看之下似乎沒什麼太大問題,但是其實烹飪有很多種方法,不是只有這四種,假如未來要增加「炒」呢? 在Kitchen再增加一個method嗎? 要增加「燉」呢? 再加一個method?

這樣子的設計,會讓日後Kitchen越來越龐大,因為現在code只是範例,可能感受不到會有多難維護,一旦日後有越來越多烹飪的方法要增加時,這份code會變得很雜亂。

另外有發現main裡面有switch嗎? 當未來烹飪方法越來越多時,這邊code也會越來越龐大,每增加一個烹飪方法,就要多一個case!

因此,我們可以把code改成下面這樣:

raw-image
raw-image
raw-image
raw-image

Console:
grill Chicken_leg


可以發現Kitchen裡面只剩下cook這個method,並且根據帶進來的class name來new出對應的obj,去做對應的烹飪動作(每種烹飪自己實作cook方法),這就是strategy design pattern。

也就是說,未來有新的烹飪方法要增加,只需增加新的class並且implements CookStrategy即可,其他地方都不用改,會自己根據顧客的選擇去做對應的烹飪!

另外,在Kitchen.java其實也可以寫成用switch case來決定要new哪種烹飪instance出來,這邊只是把它改成不用switch case,這不是strategy design pattern要討論的重點,只是如果是用switch case就會有之前提到的問題,每增加一種烹飪方法就要多一種case,也會違反OO原則!

本筆記參考:
1. https://matthung0807.blogspot.com/2018/02/java-strategy-pattern.html
2. https://dotblogs.com.tw/kobe0000001/2016/05/28/125355
3. https://lakesd6531.pixnet.net/blog/post/348119338-java%5Bdesign-pattern%E8%A8%AD%E8%A8%88%E6%A8%A1%E5%BC%8F%5D%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F(strategy-patter


留言
avatar-img
留言分享你的想法!
avatar-img
Vic Lin的沙龍
20會員
161內容數
Vic Lin的沙龍的其他內容
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇是從原先的 Iron Condor 拼盤重新分節改編。 當初開始編寫講座時還不夠進入狀況,總覺得應該就直接把拼盤端出來,讀者才不會看得不知所云,但後來又覺得,這麼重要的觀念不寫不行,只好臨時加上,卻變得上下文不連貫,怎麼讀怎麼彆扭,這次這樣編排應該好多了。
Thumbnail
這篇是從原先的 Iron Condor 拼盤重新分節改編。 當初開始編寫講座時還不夠進入狀況,總覺得應該就直接把拼盤端出來,讀者才不會看得不知所云,但後來又覺得,這麼重要的觀念不寫不行,只好臨時加上,卻變得上下文不連貫,怎麼讀怎麼彆扭,這次這樣編排應該好多了。
Thumbnail
這是歐陽立中老師的第七場歐陽 Talk 書秀《尋找創意甜蜜點》,這場讀書會當中對我來說最重要的觀念就是這個:創意曲線。想跟你分享我的心得
Thumbnail
這是歐陽立中老師的第七場歐陽 Talk 書秀《尋找創意甜蜜點》,這場讀書會當中對我來說最重要的觀念就是這個:創意曲線。想跟你分享我的心得
Thumbnail
如果你在一場撲克牌比賽中玩了一會兒,仍然不知道誰是牌桌上的菜鳥,趕快起身吧,你就是那個菜鳥。 這應該是《好策略的關鍵》第1~7章節裡,最讓我有感的一句話!! 貫穿策略執行的三部曲:診斷問題、克服關鍵點、採取連貫行動 如果你喜歡《好策略、壞策略》,這是作者睽違10年後的新著作。
Thumbnail
如果你在一場撲克牌比賽中玩了一會兒,仍然不知道誰是牌桌上的菜鳥,趕快起身吧,你就是那個菜鳥。 這應該是《好策略的關鍵》第1~7章節裡,最讓我有感的一句話!! 貫穿策略執行的三部曲:診斷問題、克服關鍵點、採取連貫行動 如果你喜歡《好策略、壞策略》,這是作者睽違10年後的新著作。
Thumbnail
最近讀了Harvard Business Review "Your Strategy Needs a Strategy"文章,文章提到處於不同產業、市場,就需要不同的策略類型;如果一概使用最經典的策略制定模式,可能會讓公司錯失成為領先者的機會,甚至慘賠出場。制定策略前,先瞭解自己所在的市場有甚麼特
Thumbnail
最近讀了Harvard Business Review "Your Strategy Needs a Strategy"文章,文章提到處於不同產業、市場,就需要不同的策略類型;如果一概使用最經典的策略制定模式,可能會讓公司錯失成為領先者的機會,甚至慘賠出場。制定策略前,先瞭解自己所在的市場有甚麼特
Thumbnail
六個罐子理財法出自《有錢人想的和你不一樣》這本書當中,簡單來說,就是每個月拿到收入的時候,依自己個生活所需按比例分成六個部分(生活支出、休閒娛樂、教育學習、長期儲蓄、規劃財富自由、捐贈給予),並專款專用,這裡重點就是將財務先進行分倉管理,再搭配上各種投資策略,就是我在幣圈的罐子理財法。
Thumbnail
六個罐子理財法出自《有錢人想的和你不一樣》這本書當中,簡單來說,就是每個月拿到收入的時候,依自己個生活所需按比例分成六個部分(生活支出、休閒娛樂、教育學習、長期儲蓄、規劃財富自由、捐贈給予),並專款專用,這裡重點就是將財務先進行分倉管理,再搭配上各種投資策略,就是我在幣圈的罐子理財法。
Thumbnail
作者:陳華夫 策略的功能與角色往往被誇大,而陷入「策略的迷思」,經濟學的古德哈特定律的一個版本說,每一個成為目標的策略都會變成一個糟糕的策略,往往導致「目標的詛咒」。
Thumbnail
作者:陳華夫 策略的功能與角色往往被誇大,而陷入「策略的迷思」,經濟學的古德哈特定律的一個版本說,每一個成為目標的策略都會變成一個糟糕的策略,往往導致「目標的詛咒」。
Thumbnail
最近大家很嫌的粥又上版面啦,一派認為憑什麼漲價,另一派認為就是有價值才敢漲。看訂價這件事,從個體的角度來說,無論是企業在販售產品,或是個人技能變現 (如醫療人員等專業),策略上常見兩種模式: 哪一個模式才是對的?? 選擇,沒有絕對的是與非對與錯,端看我們要的是什麼
Thumbnail
最近大家很嫌的粥又上版面啦,一派認為憑什麼漲價,另一派認為就是有價值才敢漲。看訂價這件事,從個體的角度來說,無論是企業在販售產品,或是個人技能變現 (如醫療人員等專業),策略上常見兩種模式: 哪一個模式才是對的?? 選擇,沒有絕對的是與非對與錯,端看我們要的是什麼
Thumbnail
你是不是常把「策略」兩個字掛在嘴上?​你可能聽過一種說法:策略是決定不做哪些事。而​成熟,就是有能力拒絕一個好的選擇,目的是要追求其他更好的選擇。
Thumbnail
你是不是常把「策略」兩個字掛在嘴上?​你可能聽過一種說法:策略是決定不做哪些事。而​成熟,就是有能力拒絕一個好的選擇,目的是要追求其他更好的選擇。
Thumbnail
簡單來說,其實就是想要完成一件事情,可以使用不同的策略去達成。
Thumbnail
簡單來說,其實就是想要完成一件事情,可以使用不同的策略去達成。
Thumbnail
內容摘要 前言  賽局理論:美麗境界酒吧美女的例子,冷落美女,追求其他的,刺激美女嫉妒心  沉沒成本,等車的例子,立刻走,    第一章 賽局理論:人人都想設法贏得勝利的遊戲 考慮自己的策略,也要考慮他人的選擇  賽局理論是互動性的決策論   
Thumbnail
內容摘要 前言  賽局理論:美麗境界酒吧美女的例子,冷落美女,追求其他的,刺激美女嫉妒心  沉沒成本,等車的例子,立刻走,    第一章 賽局理論:人人都想設法贏得勝利的遊戲 考慮自己的策略,也要考慮他人的選擇  賽局理論是互動性的決策論   
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News