最近,可以說這2025年度,自己更文的次數都大大減少,主要最近大環境不景氣,自己職業也受到波及,學習的東西也是因為
AI
而變得更多,沒辦法,你不學,總有人會學,關于AI的我也準備出個專輯,相信絕對幫助到大家
額,好像說多了,言歸正傳,我們看一下今天的主題:策略模式+工廠模式
本文主要是為了讓人懂并會用(哪怕你是一個小白,也能懂!!!)
那你說,我怎么還看不懂啊? 哈哈哈!你過來捶我
本文總綱:
文章目錄
- 場景描述:
- 1.定義策略接口(核心)
- 2.實現具體策略類(真正得出不同容量的)
- 工廠模式統一創建策略對象
- 最后總結
為了讓大家能快速明白,我在這里直接以一個例子,帶大家實戰中理解,就不放那些一看就勸退的理論術語
這里我們就用羅總之前星巴克的點單(大杯,中杯)問題的實際場景,大白話解釋策略模式結合工廠模式的應用
場景描述:
假設現在羅總來到星巴克點一杯咖啡,羅總需要選擇 咖啡的杯子規格(超大杯,大杯,中杯),每種杯子規格對應不同的杯子容量
- 超大杯 591mL 大杯473ML 中杯 354ML
為了靈活應比如羅總所說的杯容量,添加新杯規格容量,我們用策略模式封裝不同的規格容量的處理邏輯,并用工廠模式創建這些邏輯對象
1.定義策略接口(核心)
我們定義一個
CapacityStrategy
接口,這個接口對于后面杯子規格容量策略都需要實現這個接口!為什么?
因為策略模式的核心也是最重要的就是:定義一系列算法,并封裝成獨立的類,目的是為了他們之間可以相互替換
比如我買咖啡,我之前選的中杯,我和服務員說不要中杯了給我來個超大杯,這個中杯和超大杯是平等的策略,我就可以替換
//杯子容量策略接口
public interface CapacityStrategy{//不同容量計算方法double calculateCapacity();
}
2.實現具體策略類(真正得出不同容量的)
如上面所述的中杯,大杯,超大杯分別對應不同的策略類
換句話說:就是此類真正干活的,給出到底杯子規格是多少的,如大杯的容量
點過奶茶的都知道吧,你掃碼奶茶小程序點餐頁面的選擇不同規格,其實就是用到了策略模式
好處: 靈活替換算法,代碼解耦
超大杯策略
public VentiCapacityStrategy implements CapacityStrategy{@Overridepublic double calculateCapacity(){return 591.0;}
}
大杯策略
public JorumCapacityStrategy implements CapacityStrategy{@Overridepublic double calculateCapacity(){return 473.0;}
}
中杯策略
public MediumCapacityStrategy implements CapacityStrategy{@Overridepublic double calculateCapacity(){return 354.0;}
}
工廠模式統一創建策略對象
這一步,就是你在小程序上選擇不同規格的容量如大杯還是中杯就行,不需要你關心后面大杯到底對應多少容量,這一塊尤我們創建的工廠模式類來創建對應的策略對象,就是由后臺自己指定對應的杯容量
好處:隱藏創建細節,統一的對象管理
//策略工廠
public class CapacityStrategyFactory{//根據不同容量創建返回對應的策略public static CapacityStrategy getStrategy(String capacityType){case "超大杯":return new VentiCapacityStrategy();case "大杯":return new JorumCapacityStrategy();case "中杯":return new MediumCapacityStrategy();default: throw new Exception("此規格暫不支持"+capacityType);}
}
最后一步,就是真正的操作實現,我點完選擇的奶茶如大杯規格,就給我做出了大杯
public class Shopper{public static void main(String[] args){//小程序選擇的規格容量String type="大杯";//通過工廠獲取對應的容量策略對象 創建CapacityStrategy strategy=CapacityStrategyFactory.getStrategy(type);//計算對應的規格容量double amount=strategy.calculateCapacity();//System.out.println("您選擇了"+type+",容量是:"+amount+"ml")}
}
最后總結
策略模式: 把變化的部分 (不同規格容量的計算邏輯) 封裝成獨立的類,目的是為了可以靈活的替換
工廠模式: 把對象的創建過程 封裝起來,就是讓客戶只需要選擇要什么就行,不需要知道怎么造
兩者結合:既保證了代碼的靈活性(策略可替換),又降低了客戶端的復雜度(無需關心對象創建)