在策略模式(Strategy Pattern)中,一個(gè)類的行為或其算法可以在運(yùn)行時(shí)更改。這種類型的設(shè)計(jì)模式屬于行為型模式。
在策略模式中,我們創(chuàng)建表示各種策略的對(duì)象和一個(gè)行為隨著策略對(duì)象改變而改變的 context 對(duì)象。策略對(duì)象改變 context 對(duì)象的執(zhí)行算法。
定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái), 并且使它們可相互替換。在有多種算法相似的情況下,使用 if...else 所帶來(lái)的復(fù)雜和難以維護(hù)。
結(jié)構(gòu)圖
角色與理解
- 策略模式共分為三種角色:
- Context(上下文環(huán)境):持有抽象策略類,調(diào)用策略方法。
- Strategy(抽象策略類):聲明策略方法。
- Concrete Strategy(具體策略類):實(shí)現(xiàn)策略方法。
- Context持有State的引用,完成對(duì)ConcreteStrategy中策略方法的調(diào)用
核心代碼
- 抽象策略類
public interface Strategy {
void doSomething();
}
- 真實(shí)策略類
public class ConcreteStrategyA implements Strategy {
@Override
public void doSomething() {
System.out.println("AAA");
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void doSomething() {
System.out.println("BBB");
}
}
- 客戶端
public class Client {
public static void main(String[] args) {
Strategy strategy = new ConcreteStrategyA();
strategy.doSomething();
strategy = new ConcreteStrategyB();
strategy.doSomething();
}
}
-
算法
+關(guān)注
關(guān)注
23文章
4630瀏覽量
93356 -
State
+關(guān)注
關(guān)注
0文章
5瀏覽量
7681
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于入侵行為模式的告警關(guān)聯(lián)
基于訪存行為感知的存儲(chǔ)調(diào)度策略
![基于訪存<b class='flag-5'>行為</b>感知的存儲(chǔ)調(diào)度<b class='flag-5'>策略</b>](https://file.elecfans.com/web2/M00/49/5F/poYBAGKhwKiAUkp9AAAfZAi8R0E161.jpg)
設(shè)計(jì)模式最佳實(shí)踐探索—策略模式
設(shè)計(jì)模式:備忘錄設(shè)計(jì)模式
設(shè)計(jì)模式行為型:備忘錄模式
![設(shè)計(jì)<b class='flag-5'>模式</b><b class='flag-5'>行為</b><b class='flag-5'>型</b>:備忘錄<b class='flag-5'>模式</b>](https://file1.elecfans.com/web2/M00/89/47/wKgaomR_9pmAeG9KAAIjIdIFp14956.jpg)
設(shè)計(jì)模式行為型:狀態(tài)模式
![設(shè)計(jì)<b class='flag-5'>模式</b><b class='flag-5'>行為</b><b class='flag-5'>型</b>:狀態(tài)<b class='flag-5'>模式</b>](https://file1.elecfans.com/web2/M00/89/48/wKgaomR_93yAAwefAAJHxb2E7kE110.jpg)
設(shè)計(jì)模式行為型:觀察者模式
![設(shè)計(jì)<b class='flag-5'>模式</b><b class='flag-5'>行為</b><b class='flag-5'>型</b>:觀察者<b class='flag-5'>模式</b>](https://file1.elecfans.com/web2/M00/89/50/wKgZomSARkiALgl2AALp_4vblYo256.jpg)
什么是策略模式
![什么是<b class='flag-5'>策略</b><b class='flag-5'>模式</b>](https://file1.elecfans.com/web2/M00/A7/30/wKgaomUiSOeAdqq8AAA7ReYp10Q687.jpg)
設(shè)計(jì)模式-策略模式
![設(shè)計(jì)<b class='flag-5'>模式</b>-<b class='flag-5'>策略</b><b class='flag-5'>模式</b>](http://www.qldv.cn/images/chaijie_default.png)
評(píng)論