一矛双、策略模式概述
在策略模式中使用的一些面向?qū)ο螅∣O)原則:封裝變化,多用組合雪标,少用繼承零院;針對接口編程,不針對實現(xiàn)編程村刨。
策略模式是對算法的包裝告抄,是把使用算法的責任和算法本身分割開來,委派給不同的對象管理嵌牺。此模式讓算法的變化獨立于使用算法的客戶打洼。
策略模式通常把一個系列的算法包裝到一系列的策略類里面,作為一個抽象策略類的子類逆粹。
策略模式涉及到三個角色:
環(huán)境角色(context):持有一個Strategy的引用募疮。
抽象策略角色(Strategy):這是一個抽象角色,通常由一個接口或抽象類實現(xiàn)僻弹。此角色給出所有的具體策略類所需要的接口阿浓。
具體策略角色(Concrete Strategy):包裝了相關(guān)的算法或行為。
二奢方、案例代碼
策略模式上下文:
抽象策略類:
具體策略類:
客戶端調(diào)用:
三搔扁、策略模式的優(yōu)缺點
1、優(yōu)點
(1)算法可以自由切換
(2)避免使用多重條件判斷
(3)擴展性良好
2蟋字、缺點
(1)策略類會增多
(2)所有策略類都需要對外暴露
3、適用場景
(1)當一個系統(tǒng)中有許多類扭勉,他們之間的區(qū)別僅在于他們的行為鹊奖,希望動態(tài)的讓一個對象在許多行為中選擇一種行為時。
(2)當一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種時涂炎。
(3)一個對象有很多行為忠聚,不想適用多重的條件選擇語句來選擇使用哪個行為時。
四唱捣、應(yīng)用場景
Java對象排序中的應(yīng)用:Comparator外部比較器接口
抽象策略類:
具體策略類:
策略模式上下文調(diào)用: