国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

策略模式(Strategy Pattern)- 最易懂的設(shè)計模式解析

2019-11-09 17:50:59
字體:
供稿:網(wǎng)友


前言

今天我來全面總結(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è)計模式解析


目錄

策略模式.jpg


1. 介紹

1.1 定義

定義一系列算法,將每個算法封裝到具有公共接口的一系列策略類中,從而使它們可以相互替換,并讓算法可以在不影響到客戶端的情況下發(fā)生變化。

簡單來說,就是“準(zhǔn)備一組算法,并將每一個算法封裝起來,使得它們可以互換”

1.2 作用(解決的問題)

使得客戶端可以根據(jù)外部條件選擇不同策略來解決不同問題

策略模式僅僅封裝算法(包括添加 & 刪除),但策略模式并不決定在何時使用何種算法,算法的選擇由客戶端來決定 將算法的責(zé)任和本身進(jìn)行解耦 對算法進(jìn)行封裝,將算法的責(zé)任和算法本身分割開,委派給不同的對象管理。 讓算法和對象分開來,使得算法可以獨(dú)立于使用它的客戶而變化

2. 模式原理

2.1 UML類圖 & 組成

UML類圖

2.2 實(shí)例講解

接下來我用一個實(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

通過上述這個常見的生活例子,我相信你已經(jīng)完全明白了策略模式的原理了!!


3. 優(yōu)缺點(diǎn)

在全面解析完后,我來分析下其優(yōu)缺點(diǎn):

3.1 優(yōu)點(diǎn)

策略類之間可以自由切換 由于策略類都實(shí)現(xiàn)同一個接口,所以使它們之間可以自由切換。易于擴(kuò)展 增加一個新的策略只需要添加一個具體的策略類即可,基本不需要改變原有的代碼,符合“開閉原則“避免使用多重條件選擇語句(if else),充分體現(xiàn)面向?qū)ο笤O(shè)計思想。

3.2 缺點(diǎn)

客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。 策略模式將造成產(chǎn)生很多策略類,可以通過使用享元模式在一定程度上減少對象的數(shù)量。

4. 應(yīng)用場景

一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種的情況如果在一個系統(tǒng)里面有許多類,它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動態(tài)地讓一個對象在許多行為中選擇一種行為如果一個對象有很多的行為,如果不使用合適的模式,這些行為就只好使用多重的if-else語句來實(shí)現(xiàn),此時,可以使用策略模式,把這些行為轉(zhuǎn)移到相應(yīng)的具體策略類里面,就可以避免使用難以維護(hù)的多重條件選擇語句,并體現(xiàn)面向?qū)ο笊婕暗母拍睢2幌M蛻舳酥缽?fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu),在具體策略類中封裝算法和相關(guān)的數(shù)據(jù)結(jié)構(gòu),提高算法的保密性與安全性。

5. 總結(jié)

本文主要對策略模式進(jìn)行了全面介紹,接下來將介紹其他設(shè)計模式,有興趣可以繼續(xù)關(guān)注Carson_Ho的安卓開發(fā)筆記!!!!


請幫頂或評論點(diǎn)贊!因為你的鼓勵是我寫作的最大動力!

相關(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è)計模式解析


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 郑州市| 渝中区| 即墨市| 香港| 沐川县| 衡水市| 柘城县| 弥渡县| 娄烦县| 新昌县| 车险| 遵义县| 神农架林区| 通州市| 车致| 若尔盖县| 济南市| 九龙坡区| 邯郸县| 博兴县| 常德市| 阿克苏市| 绵竹市| 永善县| 荃湾区| 聂拉木县| 长寿区| 东宁县| 周宁县| 津南区| 铜川市| 安岳县| 曲水县| 交城县| 仁寿县| 永顺县| 信宜市| 白朗县| 岑溪市| 萝北县| 陈巴尔虎旗|