今天我來全面總結一下Android開發中最常用的設計模式 -策略模式。
其他設計模式介紹 1分鐘全面了解“設計模式” 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(PRoxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析
定義一系列算法,將每個算法封裝到具有公共接口的一系列策略類中,從而使它們可以相互替換,并讓算法可以在不影響到客戶端的情況下發生變化。
簡單來說,就是“準備一組算法,并將每一個算法封裝起來,使得它們可以互換”
使得客戶端可以根據外部條件選擇不同策略來解決不同問題
策略模式僅僅封裝算法(包括添加 & 刪除),但策略模式并不決定在何時使用何種算法,算法的選擇由客戶端來決定 將算法的責任和本身進行解耦 對算法進行封裝,將算法的責任和算法本身分割開,委派給不同的對象管理。 讓算法和對象分開來,使得算法可以獨立于使用它的客戶而變化接下來我用一個實例來對策略模式進行更深一步的介紹。 a. 實例概況
背景:小成有一家百貨公司,最近在定年度的促銷活動沖突:每個節日用同一個促銷活動太枯燥,沒吸引力解決方案:針對不同節目使用不同促銷活動進行促銷b. 使用步驟 步驟1: 定義抽象策略角色(Strategy):百貨公司所有促銷活動的共同接口
public abstract class Strategy { public abstract void Show();}步驟2:定義具體策略角色(Concrete Strategy):每個節日具體的促銷活動
//為春節準備的促銷活動Aclass StrategyA extends Strategy{ @Override public void show() { System.out.println("為春節準備的促銷活動A"); }}//為中秋節準備的促銷活動Bclass StrategyB extends Strategy{ @Override public void show() { System.out.println("為中秋節準備的促銷活動B"); }}//為圣誕節準備的促銷活動Cclass StrategyC extends Strategy{ @Override public void show() { System.out.println("為圣誕節準備的促銷活動C"); }}步驟3:定義環境角色(Context):用于連接上下文,即把促銷活動推銷給客戶,這里可以理解為銷售員
class Context_SalesMan{//持有抽象策略角色的引用 private Strategy strategy; //生成銷售員實例時告訴銷售員什么節日(構造方法) //使得讓銷售員根據傳入的參數(節日)選擇促銷活動(這里使用一個簡單的工廠模式) public SalesMan(String festival) { switch ( festival) { //春節就使用春節促銷活動 case "A": strategy = new StrategyA(); break; //中秋節就使用中秋節促銷活動 case "B": strategy = new StrategyB(); break; //圣誕節就使用圣誕節促銷活動 case "C": strategy = new StrategyC(); break; } } //向客戶展示促銷活動 public void SalesManShow(){ strategy.show(); }}步驟4: 客戶端調用-讓銷售員進行促銷活動的落地
public class StrategyPattern{ public static void main(String[] args){ Context_SalesMan mSalesMan ; //春節來了,使用春節促銷活動 System.out.println("對于春節:"); mSalesMan = Context_SalesMan SalesMan("A"); mSalesMan.SalesManShow(); //中秋節來了,使用中秋節促銷活動 System.out.println("對于中秋節:"); mSalesMan = Context_SalesMan SalesMan("B"); mSalesMan.SalesManShow(); //圣誕節來了,使用圣誕節促銷活動 System.out.println("對于圣誕節:"); mSalesMan = Context_SalesMan SalesMan("C"); mSalesMan.SalesManShow(); } }結果輸出
對于春節:為春節準備的促銷活動A對于中秋節:為中秋節準備的促銷活動B對于圣誕節:為圣誕節準備的促銷活動B在全面解析完后,我來分析下其優缺點:
本文主要對策略模式進行了全面介紹,接下來將介紹其他設計模式,有興趣可以繼續關注Carson_Ho的安卓開發筆記?。。?!
相關文章閱讀 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(Proxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析
新聞熱點
疑難解答