
今天我來全面總結(jié)一下Android開發(fā)中最常用的設(shè)計模式 -策略模式。
其他設(shè)計模式介紹 1分鐘全面了解“設(shè)計模式” 單例模式(Singleton) - 最易懂的設(shè)計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設(shè)計模式解析 工廠方法模式(Factory Method)- 最易懂的設(shè)計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設(shè)計模式解析 策略模式(Strategy Pattern)- 最易懂的設(shè)計模式解析 適配器模式(Adapter Pattern)- 最易懂的設(shè)計模式解析 代理模式(PRoxy Pattern)- 最易懂的設(shè)計模式解析 模板方法模式(Template Method) - 最易懂的設(shè)計模式解析 建造者模式(Builder Pattern)- 最易懂的設(shè)計模式解析 外觀模式(Facade Pattern) - 最易懂的設(shè)計模式解析

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