摘要:可以避免使用多重條件轉移語句缺點客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。不希望客戶端知道復雜的與算法相關的數據結構,在具體策略類中封裝算法和相關的數據結構,提高算法的保密性與安全性。在中的應用中的四種拒絕策略
定義
策略模式是對象行為模式的一種
定義三要素:
一組不同的算法(策略),各有優劣
實現了同一接口,之間可以互相替換
在不同的業務場景下,調用方依據業務決定調用哪種策略(不同的場景下對同一行為有不同的實現)
uml類圖 優缺點優點:
易于切換(李氏替換原則)
由于策略類都實現同一個接口,所以使它們之間可以自由切換。
易于擴展(開閉原則)
增加一個新的策略只需要添加一個具體的策略類即可,基本不需要改變原有的代碼,符合“開閉原則“
提供了管理相關的算法族的辦法。
提供了可以替換繼承關系的辦法。
可以避免使用多重條件轉移語句
缺點
客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
有可能產生很多策略類,可以通過使用享元模式在一定程度上減少對象的數量
應用場景以下幾種場景
一個系統需要動態地在幾種算法中選擇一種的情況
如果在一個系統里面有許多類,它們之間的區別僅在于它們的行為,那么使用策略模式可以動態地讓一個對象在許多行為中選擇一種行為
如果一個對象有很多的行為,如果不使用合適的模式,這些行為就只好使用多重的if-else語句來實現,此時,可以使用策略模式,把這些行為轉移到相應的具體策略類里面,就可以避免使用難以維護的多重條件選擇語句,并體現面向對象涉及的概念。
不希望客戶端知道復雜的、與算法相關的數據結構,在具體策略類中封裝算法和相關的數據結構,提高算法的保密性與安全性。
在jdk中的應用
ThreadPoolExecutor中的四種拒絕策略
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
CallerRunsPolicy
Comparator
FilenameFilter
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71644.html
時間:2017年08月31日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github.com/zccodere/s... 第一章:策略模式簡介 1-1 簡介 課程大綱 什么是策略模式 策略模式如何實現 策略模式總結篇 實例案例分享 日常生活中的策略 Wor...
摘要:什么是策略模式策略模式,就是將不同的算法各自封裝起來,然后根據程序的不同情況,采用不同的算法,有點像工廠模式。在其他語言中,實現這樣的思路也比較費勁,而得函數非常靈活,本來可以當值傳遞,所以實現策略模式非常輕松,也很靈活。 什么是策略模式 策略模式,就是將不同的算法各自封裝起來,然后根據程序的不同情況,采用不同的算法,有點像工廠模式。比如在很多種情況下,都要寫ifXXX dosomet...
摘要:本篇主要講述中使用函數來實現策略模式和命令模式,最后總結出這種做法背后的思想。 《流暢的Python》筆記。本篇主要講述Python中使用函數來實現策略模式和命令模式,最后總結出這種做法背后的思想。 1. 重構策略模式 策略模式如果用面向對象的思想來簡單解釋的話,其實就是多態。父類指向子類,根據子類對同一方法的不同重寫,得到不同結果。 1.1 經典的策略模式 下圖是經典的策略模式的U...
摘要:設計模式系列之入門設計模式是一套被反復使用多數人知曉的經過分類編目的代碼設計經驗的總結。毫無疑問,設計模式于己于他人于系統都是多贏的設計模式使代碼編制真正工程化設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。 PHP設計模式系列之入門 設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易...
閱讀 710·2021-11-18 10:02
閱讀 3586·2021-09-02 10:21
閱讀 1747·2021-08-27 16:16
閱讀 2061·2019-08-30 15:56
閱讀 2389·2019-08-29 16:53
閱讀 1376·2019-08-29 11:18
閱讀 2959·2019-08-26 10:33
閱讀 2645·2019-08-23 18:34