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原則!
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
21會員
161內容數
留言0
查看全部
發表第一個留言支持創作者!
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
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
在開發程式時,我們常常會遇到需要根據不同情況選擇不同執行方式的需求。以檔案壓縮為例,市面上有很多種壓縮格式,每種格式都有其優點和用途。如果我們想要讓程式可以靈活地切換不同的壓縮方式,策略模式 Strategy Pattern 正是解決這類問題的工具。 策略模式的概念很簡單,就是把不同的「策略」或「
Thumbnail
在金裕鎮的著作《其實你可以再賣貴一點》中,他提到的一個他的學生的例子——月尾島MeToo咖啡店的創新定價,透過這個例子精闢地探討了溢價訂價(Premium Strategy)策略的奧秘,並解析如何提升商品或服務的價值感知。 月尾島MeToo咖啡店位於風景如畫的月尾島,這裡不僅是青春洋溢的聚會地,更
Thumbnail
傳統台灣人個性非常保守,不想承擔任何風險,投資任何商品,只要掛上保本,就會趨之若鶩,甚至把全部的錢都存在銀行,因為它「保本」。不過只要通膨大於定存利率,實質購買力還是會下降,等於實務上並沒有保本. 有沒有一種方式,讓我最差情況可以近乎保本,但是卻能保有獲利想像空間呢?答案就是槓鈴策略的資產配置!
Tensions in Myanmar continue to be in the global spotlight. The region has long been plagued by civil war, and different ethnic armed groups have clas
Thumbnail
Introduction: Welcome to the extraordinary universe of Overwatch, where cutting-edge graphics, strategic brilliance, and a diverse cast of characters
Thumbnail
當面臨多種算法或策略的選擇,策略模式可以作為一個非常有效的解決方案。它允許我們在運行時選擇不同的策略,從而使程式碼更加靈活和可擴展。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
在開發程式時,我們常常會遇到需要根據不同情況選擇不同執行方式的需求。以檔案壓縮為例,市面上有很多種壓縮格式,每種格式都有其優點和用途。如果我們想要讓程式可以靈活地切換不同的壓縮方式,策略模式 Strategy Pattern 正是解決這類問題的工具。 策略模式的概念很簡單,就是把不同的「策略」或「
Thumbnail
在金裕鎮的著作《其實你可以再賣貴一點》中,他提到的一個他的學生的例子——月尾島MeToo咖啡店的創新定價,透過這個例子精闢地探討了溢價訂價(Premium Strategy)策略的奧秘,並解析如何提升商品或服務的價值感知。 月尾島MeToo咖啡店位於風景如畫的月尾島,這裡不僅是青春洋溢的聚會地,更
Thumbnail
傳統台灣人個性非常保守,不想承擔任何風險,投資任何商品,只要掛上保本,就會趨之若鶩,甚至把全部的錢都存在銀行,因為它「保本」。不過只要通膨大於定存利率,實質購買力還是會下降,等於實務上並沒有保本. 有沒有一種方式,讓我最差情況可以近乎保本,但是卻能保有獲利想像空間呢?答案就是槓鈴策略的資產配置!
Tensions in Myanmar continue to be in the global spotlight. The region has long been plagued by civil war, and different ethnic armed groups have clas
Thumbnail
Introduction: Welcome to the extraordinary universe of Overwatch, where cutting-edge graphics, strategic brilliance, and a diverse cast of characters
Thumbnail
當面臨多種算法或策略的選擇,策略模式可以作為一個非常有效的解決方案。它允許我們在運行時選擇不同的策略,從而使程式碼更加靈活和可擴展。