策略模式Strategy Pattern

2021-08-31 19:13:41 字數 1015 閱讀 7061

描述:定義一組演算法,每個演算法都封裝起來,並使它們之間可以互換。

實現:定義多個繼承於同乙個介面的策略,再使用乙個類將這種物件封裝起來。在呼叫時,以這個封裝類為準,不斷的讓這個類去封裝不同的策略。實現策略之間的轉換。

策略模式的優點:

演算法可以自由切換;

避免使用多重條件判斷;(多重條件語句不易維護,且容易出錯。使用策略模式後,可以由其它模組決定採用何種策略)

擴充套件性良好。

策略模式的缺點:

策略數量增多;

所有的策略類都需要對外暴露;

使用場景:

多各類只有在演算法或者行為上稍有不同;

演算法需要自由切換場景;

需要遮蔽演算法規則的場景。

使用時的注意事項:

當乙個系統中的策略家族的策略數超過了4個,則需要考慮使用混合模式,解決策略膨脹和對外暴露的問題。否則完成後的維護十分困難。

策略模式類圖:

策略模式的三個角色:

context封裝角色:乙個上下文角色,起承上啟下的作用。它遮蔽高層模組對策略,演算法的直接訪問,封裝可能存在的變化。

strategy抽象策略角色:通常為介面,其中定義了策略,或演算法必需的屬性和方法。

concretestrategy具體策略角色:包含了具體的演算法。

通用策略模式模板:

public inte***ce strategy

public class concretestrategy1 implements strategy

}public class concretestrategy2 implements strategy

}public class context

//封裝後的策略方法

public void doanything() }

public class client

}

模式 策略模式

前言 所有的設計模式都是基於程式設計屆前輩們的不斷實踐得出的解決一類問題中比較有效高效的程式設計方法。策略模式 策略模式用於解決業務中不同場景下統一行為的細微差別問題。策略模式遵循 開閉原則 舉個例子來說,在購物車功能中,結算 的時候會根據使用者的不同級別去打折,那麼打折計算 的這一行為就會有不同演...

策略模式(策略列舉)

首先定義乙個介面 package com.yecc.suanfa.strategy created by yecc on 2020 11 16 19 35 public inte ce strategy 定義三個繼承介面的類 package com.yecc.suanfa.strategy crea...

策略模式及Spring整合策略模式

抽象策略類 inte ce sortservice 具體策略類 class insertionsortserviceimpl implements sortservice else arr j 1 tmp return arr 氣泡排序 class bubblesortserviceimpl imp...