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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-09 16:50:46
字體:
來源:轉載
供稿:網友


前言

今天我來全面總結一下Android開發中最常用的設計模式 -策略模式。

其他設計模式介紹 1分鐘全面了解“設計模式” 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(PRoxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析


目錄

策略模式.jpg


1. 介紹

1.1 定義

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

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

1.2 作用(解決的問題)

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

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

2. 模式原理

2.1 UML類圖 & 組成

UML類圖

2.2 實例講解

接下來我用一個實例來對策略模式進行更深一步的介紹。 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

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


3. 優缺點

在全面解析完后,我來分析下其優缺點:

3.1 優點

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

3.2 缺點

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

4. 應用場景

一個系統需要動態地在幾種算法中選擇一種的情況如果在一個系統里面有許多類,它們之間的區別僅在于它們的行為,那么使用策略模式可以動態地讓一個對象在許多行為中選擇一種行為如果一個對象有很多的行為,如果不使用合適的模式,這些行為就只好使用多重的if-else語句來實現,此時,可以使用策略模式,把這些行為轉移到相應的具體策略類里面,就可以避免使用難以維護的多重條件選擇語句,并體現面向對象涉及的概念。不希望客戶端知道復雜的、與算法相關的數據結構,在具體策略類中封裝算法和相關的數據結構,提高算法的保密性與安全性。

5. 總結

本文主要對策略模式進行了全面介紹,接下來將介紹其他設計模式,有興趣可以繼續關注Carson_Ho的安卓開發筆記!!!!


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

相關文章閱讀 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(Proxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊金霍洛旗| 长乐市| 洪泽县| 松溪县| 上饶县| 镇赉县| 罗定市| 托克逊县| 江都市| 青岛市| 中宁县| 井陉县| 洛南县| 五指山市| 朔州市| 原平市| 阳朔县| 长顺县| 平南县| 噶尔县| 佛学| 九寨沟县| 皋兰县| 龙泉市| 佳木斯市| 四会市| 灵寿县| 合阳县| 重庆市| 呼图壁县| 昌邑市| 仁寿县| 略阳县| 朝阳县| 建始县| 泸定县| 麻阳| 固镇县| 清新县| 工布江达县| 菏泽市|