Strategy Design Pattern

更新於 發佈於 閱讀時間約 3 分鐘
簡單來說,其實就是想要完成一件事情,可以使用不同的策略去達成
例如,想要設計一個排序演算法,有氣泡排序、插入排序、快速排序等等多種不同的方法,但是都可以達到一樣的結果。 又或者是搜尋演算法,其實也是一樣的道理。

再舉個例子,在購物網站買東西的付款方式,其實也是一樣,結帳的方式你可以選信用卡、轉帳、貨到付款等等,有很多不同的方式可以達到付款的目的。
以下直接用範例來了解什麼是策略設計模式(Strategy design pattern)。
假如今天我開了一家餐廳,顧客點了一支「烤」雞腿,我們可能會很直覺的這樣寫:
廚房裡面可以煎、烤、炸、蒸食物,乍看之下似乎沒什麼太大問題,但是其實烹飪有很多種方法,不是只有這四種,假如未來要增加「炒」呢? 在Kitchen再增加一個method嗎? 要增加「燉」呢? 再加一個method?
這樣子的設計,會讓日後Kitchen越來越龐大,因為現在code只是範例,可能感受不到會有多難維護,一旦日後有越來越多烹飪的方法要增加時,這份code會變得很雜亂。
另外有發現main裡面有switch嗎? 當未來烹飪方法越來越多時,這邊code也會越來越龐大,每增加一個烹飪方法,就要多一個case!
因此,我們可以把code改成下面這樣:
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原則!
為什麼會看到廣告
avatar-img
21會員
161內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
透過K8S Ingress 和 NodePort service直接連線Pod中的App
透過CI/CD工具,如最常見的Jenkins,可以讓工程師專注在開發上,只要將code push到git後,就會有一整套完整的整合、測試、部屬流程,可以大大節省很多時間呢。
透過K8S Ingress 和 NodePort service直接連線Pod中的App
透過CI/CD工具,如最常見的Jenkins,可以讓工程師專注在開發上,只要將code push到git後,就會有一整套完整的整合、測試、部屬流程,可以大大節省很多時間呢。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
想像你進入一家高級餐廳準備點餐。菜單上的選擇繁多,而你不只是想要某個固定套餐,而是希望有些特別的要求,比如多點一份沙拉,少放一點醬料。這樣的客製化訂單流程,其實就很像建造者模式。 建造者模式是一種專門用來建立複雜物件的設計模式。它將物件的建立過程分解成一個個小步驟,讓你可以靈活選擇每一個步驟的內容
※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
一個好的策略不一定得很複雜,但必須得是有計畫的行事。 對於有驚無險流來說,完整的【策略】在流程上應該包含了策略三部曲。
Thumbnail
    接續上一篇文章,人性的設計是喜歡享受美食的,也很容易受到以為是清淡的食物所欺騙。所以既然知道人性的設計是如此,就要像查理。蒙格所說的盡量反著想,不要全盤接收店家所推薦的組合。這樣的組合可能是最多人會點的,但也有可能是店家想要強力行銷的組合,這些未必是自己想要的。在用餐時也趁機練習這樣的思考方
Thumbnail
如果把知識比擬成串燒,你是一家巷弄內x沒店面的燒烤店老闆,你要如何制定出不同的套餐,讓一串串串燒熱賣,而不至於賣到天荒地老呢?
Thumbnail
藉由創意思考在定位、商品、廣告和通路上的應用,可以讓你在餐飲界取得巨大成功。瞭解如何運用加法和減法的簡單方法,將不同口味、品牌和口感加在一起,或者減去顧客不喜歡的元素,這些都可以創造出驚喜的商品。在創意商品的開發過程中,必須保證美味,才能讓顧客感到驚喜而不是驚嚇。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
策略規劃怎麼做?專案管理怎麼規劃流程?做好前期策略流程準備,專案團隊才能一直朝著共同目標前進!跟著我們一起 5 步學會規劃專案策略,從確立目標開始,照著範例一步步進行環境分析,掌握關鍵策略選項和計劃制定高效工具,隨時監控KPIs完成情況!還有免費工具推薦,讓你可以一鍵生成策略流程圖!
Thumbnail
同樣是餐飲業,客人消費的心理大不相同 每個人一定都有去餐廳點餐的經驗,有不少都改成線上點餐縮減前台服務人員,但最基礎的菜單版面都還是以推薦套餐-單點-特色料理-甜點飲品這種順序做排列組合,那如果在小吃攤看到這種菜單,會讓你想點餐還是缺乏興趣呢? 舉個例子,你去買鹹酥雞看到菜單上第一行寫著,套
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
想像你進入一家高級餐廳準備點餐。菜單上的選擇繁多,而你不只是想要某個固定套餐,而是希望有些特別的要求,比如多點一份沙拉,少放一點醬料。這樣的客製化訂單流程,其實就很像建造者模式。 建造者模式是一種專門用來建立複雜物件的設計模式。它將物件的建立過程分解成一個個小步驟,讓你可以靈活選擇每一個步驟的內容
※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
一個好的策略不一定得很複雜,但必須得是有計畫的行事。 對於有驚無險流來說,完整的【策略】在流程上應該包含了策略三部曲。
Thumbnail
    接續上一篇文章,人性的設計是喜歡享受美食的,也很容易受到以為是清淡的食物所欺騙。所以既然知道人性的設計是如此,就要像查理。蒙格所說的盡量反著想,不要全盤接收店家所推薦的組合。這樣的組合可能是最多人會點的,但也有可能是店家想要強力行銷的組合,這些未必是自己想要的。在用餐時也趁機練習這樣的思考方
Thumbnail
如果把知識比擬成串燒,你是一家巷弄內x沒店面的燒烤店老闆,你要如何制定出不同的套餐,讓一串串串燒熱賣,而不至於賣到天荒地老呢?
Thumbnail
藉由創意思考在定位、商品、廣告和通路上的應用,可以讓你在餐飲界取得巨大成功。瞭解如何運用加法和減法的簡單方法,將不同口味、品牌和口感加在一起,或者減去顧客不喜歡的元素,這些都可以創造出驚喜的商品。在創意商品的開發過程中,必須保證美味,才能讓顧客感到驚喜而不是驚嚇。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
策略規劃怎麼做?專案管理怎麼規劃流程?做好前期策略流程準備,專案團隊才能一直朝著共同目標前進!跟著我們一起 5 步學會規劃專案策略,從確立目標開始,照著範例一步步進行環境分析,掌握關鍵策略選項和計劃制定高效工具,隨時監控KPIs完成情況!還有免費工具推薦,讓你可以一鍵生成策略流程圖!
Thumbnail
同樣是餐飲業,客人消費的心理大不相同 每個人一定都有去餐廳點餐的經驗,有不少都改成線上點餐縮減前台服務人員,但最基礎的菜單版面都還是以推薦套餐-單點-特色料理-甜點飲品這種順序做排列組合,那如果在小吃攤看到這種菜單,會讓你想點餐還是缺乏興趣呢? 舉個例子,你去買鹹酥雞看到菜單上第一行寫著,套