亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

策略模式(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) - 最易懂的設計模式解析


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女毛茸茸| 国产成人一区二区三区电影| 成人精品视频在线| 国产精品大陆在线观看| 久久精品成人动漫| 精品久久久国产精品999| 美女999久久久精品视频| 国产精品视频1区| 97精品一区二区视频在线观看| 久久久久久久久久久免费精品| 久久成人精品一区二区三区| 日韩福利在线播放| 成人天堂噜噜噜| 国产一区二区三区免费视频| 亚洲第一免费网站| 日韩在线观看视频免费| 久久久久久久久久久久久久久久久久av| 国产精品欧美日韩久久| 97视频在线免费观看| 日韩av片永久免费网站| 日韩成人高清在线| 久久精品欧美视频| 91av在线播放| 欧美极品美女视频网站在线观看免费| 清纯唯美亚洲综合| 欧日韩不卡在线视频| 国产91精品久久久久久| 亚洲欧美中文日韩在线| 亚洲美女动态图120秒| 国产精品视频永久免费播放| 日韩美女视频免费在线观看| 欧美视频免费在线观看| 欧美激情啊啊啊| 九九久久综合网站| 日韩的一区二区| 亚洲国产精品国自产拍av秋霞| 欧洲亚洲女同hd| 日韩欧美国产高清91| 中日韩美女免费视频网址在线观看| 91在线观看免费高清完整版在线观看| 日韩av在线免费看| 久久免费视频观看| 久久97精品久久久久久久不卡| 日韩av网站导航| 国产综合在线观看视频| 国产经典一区二区| 日韩欧美在线视频免费观看| 欧美第一黄色网| 午夜精品三级视频福利| 国产精品激情自拍| 精品久久久久久久大神国产| 精品欧美一区二区三区| 亚洲免费中文字幕| 国产精品九九九| 国产精品精品视频一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 国产成人一区二区在线| 国模极品一区二区三区| 国产精品久久国产精品99gif| 中文字幕一区二区精品| 成人精品视频99在线观看免费| 亚洲а∨天堂久久精品喷水| 亚洲国产精品久久久久秋霞蜜臀| 久久久久久九九九| 国产色视频一区| 欧美老肥婆性猛交视频| 91美女高潮出水| 久久青草福利网站| 欧美成人免费va影院高清| 欧美日韩福利视频| 九九热精品视频国产| 亚洲第一福利网站| 欧美与黑人午夜性猛交久久久| 国产精品人人做人人爽| 国产精品三级在线| 国产成人一区二区| 欧美另类高清videos| 热久久美女精品天天吊色| 亚洲国产成人精品久久久国产成人一区| 国产精品99久久久久久久久久久久| 日本成人黄色片| 久久久之久亚州精品露出| 夜夜嗨av一区二区三区四区| 51久久精品夜色国产麻豆| 91免费的视频在线播放| 国产精品高潮呻吟久久av黑人| 法国裸体一区二区| 欧美色播在线播放| 亚洲男人天堂2019| 成人97在线观看视频| 久久精品电影网| 欧美老女人xx| 久久久国产精彩视频美女艺术照福利| 欧美电影在线观看网站| 亚洲欧美另类国产| 在线精品视频视频中文字幕| 亚洲视频在线观看视频| 激情亚洲一区二区三区四区| 爱福利视频一区| 国产日韩在线看| 亚洲免费视频观看| 国产精品狼人色视频一区| 爽爽爽爽爽爽爽成人免费观看| 久久99久久亚洲国产| 成人在线国产精品| 国产+成+人+亚洲欧洲| 奇米四色中文综合久久| 欧美成人免费全部| 国产欧美精品日韩精品| 亚洲女人天堂网| 日韩美女在线看| 久久久国产精品视频| 成人免费网站在线观看| 久久天天躁狠狠躁老女人| 51ⅴ精品国产91久久久久久| 久久国产天堂福利天堂| 久久国产加勒比精品无码| 精品亚洲一区二区三区四区五区| 岛国av一区二区在线在线观看| 亚洲精美色品网站| 国内精品久久久久久久| 中文字幕亚洲无线码a| 最好看的2019的中文字幕视频| 美女av一区二区三区| 久久久久北条麻妃免费看| 亚洲国产欧美久久| 亚洲精品自拍偷拍| 国产美女直播视频一区| 欧美一区二粉嫩精品国产一线天| 国产精品jvid在线观看蜜臀| 欧美激情第三页| 午夜精品久久久久久久99黑人| 亚洲xxxx做受欧美| 97在线视频免费| 97精品在线观看| 国产成人精品a视频一区www| 国产成人精品在线视频| 亚洲最大的成人网| 91超碰caoporn97人人| 久久成人精品电影| 中文字幕日韩专区| 九九视频这里只有精品| 亚洲一级黄色av| 日韩av免费在线观看| 亚洲色图狂野欧美| 欧美日韩国产一区中文午夜| 国产suv精品一区二区三区88区| 日韩精品在线免费观看视频| 日韩美女在线观看一区| 中文字幕av一区中文字幕天堂| 成人亚洲欧美一区二区三区| 一区二区欧美激情| www.日韩av.com| 国产一区二区日韩| 亚洲九九九在线观看| 欧美精品激情在线观看| 中文字幕亚洲欧美日韩在线不卡| 欧美影院在线播放| 亚洲区bt下载| 亚洲午夜激情免费视频| 色综合色综合网色综合| 琪琪第一精品导航| 欧美成人精品三级在线观看| 日本一区二区不卡|