摘要:可以避免使用多重條件轉(zhuǎn)移語(yǔ)句缺點(diǎn)客戶(hù)端必須知道所有的策略類(lèi),并自行決定使用哪一個(gè)策略類(lèi)。不希望客戶(hù)端知道復(fù)雜的與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu),在具體策略類(lèi)中封裝算法和相關(guān)的數(shù)據(jù)結(jié)構(gòu),提高算法的保密性與安全性。在中的應(yīng)用中的四種拒絕策略
定義
策略模式是對(duì)象行為模式的一種
定義三要素:
一組不同的算法(策略),各有優(yōu)劣
實(shí)現(xiàn)了同一接口,之間可以互相替換
在不同的業(yè)務(wù)場(chǎng)景下,調(diào)用方依據(jù)業(yè)務(wù)決定調(diào)用哪種策略(不同的場(chǎng)景下對(duì)同一行為有不同的實(shí)現(xiàn))
uml類(lèi)圖 優(yōu)缺點(diǎn)優(yōu)點(diǎn):
易于切換(李氏替換原則)
由于策略類(lèi)都實(shí)現(xiàn)同一個(gè)接口,所以使它們之間可以自由切換。
易于擴(kuò)展(開(kāi)閉原則)
增加一個(gè)新的策略只需要添加一個(gè)具體的策略類(lèi)即可,基本不需要改變?cè)械拇a,符合“開(kāi)閉原則“
提供了管理相關(guān)的算法族的辦法。
提供了可以替換繼承關(guān)系的辦法。
可以避免使用多重條件轉(zhuǎn)移語(yǔ)句
缺點(diǎn)
客戶(hù)端必須知道所有的策略類(lèi),并自行決定使用哪一個(gè)策略類(lèi)。
有可能產(chǎn)生很多策略類(lèi),可以通過(guò)使用享元模式在一定程度上減少對(duì)象的數(shù)量
應(yīng)用場(chǎng)景以下幾種場(chǎng)景
一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種的情況
如果在一個(gè)系統(tǒng)里面有許多類(lèi),它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動(dòng)態(tài)地讓一個(gè)對(duì)象在許多行為中選擇一種行為
如果一個(gè)對(duì)象有很多的行為,如果不使用合適的模式,這些行為就只好使用多重的if-else語(yǔ)句來(lái)實(shí)現(xiàn),此時(shí),可以使用策略模式,把這些行為轉(zhuǎn)移到相應(yīng)的具體策略類(lèi)里面,就可以避免使用難以維護(hù)的多重條件選擇語(yǔ)句,并體現(xiàn)面向?qū)ο笊婕暗母拍睢?/p>
不希望客戶(hù)端知道復(fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu),在具體策略類(lèi)中封裝算法和相關(guān)的數(shù)據(jù)結(jié)構(gòu),提高算法的保密性與安全性。
在jdk中的應(yīng)用
ThreadPoolExecutor中的四種拒絕策略
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
CallerRunsPolicy
Comparator
FilenameFilter
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/71644.html
時(shí)間:2017年08月31日星期四說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:策略模式簡(jiǎn)介 1-1 簡(jiǎn)介 課程大綱 什么是策略模式 策略模式如何實(shí)現(xiàn) 策略模式總結(jié)篇 實(shí)例案例分享 日常生活中的策略 Wor...
摘要:什么是策略模式策略模式,就是將不同的算法各自封裝起來(lái),然后根據(jù)程序的不同情況,采用不同的算法,有點(diǎn)像工廠模式。在其他語(yǔ)言中,實(shí)現(xiàn)這樣的思路也比較費(fèi)勁,而得函數(shù)非常靈活,本來(lái)可以當(dāng)值傳遞,所以實(shí)現(xiàn)策略模式非常輕松,也很靈活。 什么是策略模式 策略模式,就是將不同的算法各自封裝起來(lái),然后根據(jù)程序的不同情況,采用不同的算法,有點(diǎn)像工廠模式。比如在很多種情況下,都要寫(xiě)ifXXX dosomet...
摘要:策略模式在構(gòu)造方法或方法中初始化各自需要的策略模式代碼策略接口具體策略具體策略上下文抽象類(lèi)我理解的這個(gè)類(lèi)的作用是負(fù)責(zé)策略與用戶(hù)使用者的連接,也是策略模式的入口持有一個(gè)具體策略的對(duì)象構(gòu)造函數(shù),傳入一個(gè)具體策略對(duì)象策略方法具體環(huán)境類(lèi)應(yīng)用場(chǎng)景多個(gè) 策略模式UML:showImg(https://segmentfault.com/img/bVbdrhV?w=999&h=499); Contex...
摘要:本篇主要講述中使用函數(shù)來(lái)實(shí)現(xiàn)策略模式和命令模式,最后總結(jié)出這種做法背后的思想。 《流暢的Python》筆記。本篇主要講述Python中使用函數(shù)來(lái)實(shí)現(xiàn)策略模式和命令模式,最后總結(jié)出這種做法背后的思想。 1. 重構(gòu)策略模式 策略模式如果用面向?qū)ο蟮乃枷雭?lái)簡(jiǎn)單解釋的話,其實(shí)就是多態(tài)。父類(lèi)指向子類(lèi),根據(jù)子類(lèi)對(duì)同一方法的不同重寫(xiě),得到不同結(jié)果。 1.1 經(jīng)典的策略模式 下圖是經(jīng)典的策略模式的U...
摘要:設(shè)計(jì)模式系列之入門(mén)設(shè)計(jì)模式是一套被反復(fù)使用多數(shù)人知曉的經(jīng)過(guò)分類(lèi)編目的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。毫無(wú)疑問(wèn),設(shè)計(jì)模式于己于他人于系統(tǒng)都是多贏的設(shè)計(jì)模式使代碼編制真正工程化設(shè)計(jì)模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。 PHP設(shè)計(jì)模式系列之入門(mén) 設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易...
閱讀 717·2021-11-18 10:02
閱讀 3611·2021-09-02 10:21
閱讀 1753·2021-08-27 16:16
閱讀 2069·2019-08-30 15:56
閱讀 2394·2019-08-29 16:53
閱讀 1382·2019-08-29 11:18
閱讀 2964·2019-08-26 10:33
閱讀 2649·2019-08-23 18:34