定義了一組演算法(業務規則);
封裝了每個演算法;
這族的演算法可互換代替(interchangeable)。
抽象策略角色: 策略類,通常由乙個介面或者抽象類實現。
環境角色:持有乙個策略類的引用,最終給客戶端呼叫。
為了方便比對傳入的場景值,選擇對應的策略處理類,定義乙個執行時註解
就是真正處理執行巡檢點位的實現,它們是要繼承策略抽象類的;
可見光執行策略如下:
這裡的@itemannotation就是上面自定義的註解,cameratype是自定義的常量,對應場景值,作用是根據不同場景值,執行不同的行為。
結合工廠模式,在程式啟動時,採用@postconstruct註解,將實現baseitemstrategy抽象類的所有策略類都載入到記憶體中了,根據不同場景值,選擇對應的處理類,全部**如下:
所有的策略類都寫完,看下如何使用。
如果後續需要新增其他的巡檢項點位執行模式,那就只需要新增乙個處理類,新增乙個對應的場景值就可以了,對原有**不侵入。
策略模式的主要優點如下:
策略模式提供了對 「開閉原則」 的完美支援,使用者可以在不修改原有系統的基礎上選擇演算法或行為,也可以靈活地增加新的演算法或行為。
策略模式提供了管理相關的演算法族的辦法。策略類的等級結構定義了乙個演算法或行為族,恰當使用繼承可以把公共的**移到抽象策略類中,從而避免重複的**。
策略模式提供了一種可以替換繼承關係的辦法。如果不使用策略模式而是通過繼承,這樣演算法的使用就和演算法本身混在一起,不符合 「單一職責原則」,而且使用繼承無法實現演算法或行為在程式執行時的動態切換。
使用策略模式可以避免多重條件選擇語句。多重條件選擇語句是硬編碼,不易維護。
策略模式提供了一種演算法的復用機制,由於將演算法單獨提取出來封裝在策略類中,因此不同的環境類可以方便地復用這些策略類。
策略模式的主要缺點如下:
客戶端必須知道所有的策略類,並自行決定使用哪乙個策略類。這就意味著客戶端必須理解這些演算法的區別,以便適時選擇恰當的演算法。換言之,策略模式只適用於客戶端知道所有的演算法或行為的情況。
策略模式將造成系統產生很多具體策略類,任何細小的變化都將導致系統要增加乙個新的具體策略類。
無法同時在客戶端使用多個策略類,也就是說,在使用策略模式時,客戶端每次只能使用乙個策略類,不支援使用乙個策略類完成部分功能後再使用另乙個策略類來完成剩餘功能的情況。
C 設計模式 策略模式與簡單工廠模式結合
策略模式相較之於簡單工廠模式適用於生產方法經常變化且方法較為繁多的情況,因為生產方法時常變化就會需要頻繁修改工廠類,違背了開閉原則,這時就可以用策略選擇類由客戶端根據需求動態切換策略。且策略模式通過進一步封裝了 細節,沒有像簡單工廠模式那樣在客戶端建立詳細的物件,而把任務交給了策略選擇類去執行,所以...
簡單工廠和策略模式結合
商場 活動 打折 滿額返現等等 主函式對工廠模式和策略模式結合的呼叫 class program cashsuper類定義 返回參加活動後結果,使用多型特性 public abstract class cashsuper 正常 打折和滿額返現的實現 public class cashnormal c...
簡單工廠和策略模式結合
商場 活動 打折 滿額返現等等 主函式對工廠模式和策略模式結合的呼叫 class program cashsuper類定義 返回參加活動後結果,使用多型特性 public abstract class cashsuper 正常 打折和滿額返現的實現 public class cashnormal c...