策略模式

策略模式(Strategy):定義了一組算法器紧,將每個(gè)算法都封裝起來叠纹,并且使它們之間可以互換跨新。UML結(jié)構(gòu)圖如下:

image.png

Context是上下文剃盾,用一個(gè)ConcreteStrategy來配置,維護(hù)一個(gè)對Strategy對象的引用琉朽;Strategy是策略類毒租,用于定義所有支持算法的公共接口;ConcreteStrategy是具體策略類箱叁,封裝了具體的算法或行為蝌衔,繼承于Strategy。

1. Context上下文

Context上下文角色蝌蹂,也叫Context封裝角色噩斟,起承上啟下的作用,屏蔽高層模塊對策略孤个、算法的直接訪問剃允,封裝可能存在的變化。

public class Context {
  Strategy strategy;
  public Context(Strategy strategy) { 
    this.strategy = strategy; 
  } 
  //上下文接口
  public void contextInterface() { 
    strategy.algorithmInterface(); 
  }
}

2. 策略角色

抽象策略角色齐鲤,是對策略斥废、算法家族的抽象,通常為接口给郊,定義每個(gè)策略或算法必須具有的方法和屬性牡肉。algorithm是“運(yùn)算法則”的意思。

public abstract class Strategy {
  //算法方法
  public abstract void algorithmInterface();
}

3. 具體策略角色

用于實(shí)現(xiàn)抽象策略中的操作淆九,即實(shí)現(xiàn)具體的算法统锤,下方用print代替毛俏。測試類共3個(gè)ConcreteStrategy,其它兩個(gè)類與ConcreteStrategyA同理饲窿,就不再贅述了煌寇。

public class ConcreteStrategyA extends Strategy {
  @Override
  public void algorithmInterface() {
    System.out.println("算法A實(shí)現(xiàn)");
  }
}

4. Client客戶端

依次更換策略,測試一下策略模式逾雄。

public class Client {
  public static void main(String[] args) {
    Context context;
    context = new Context(new ConcreteStrategyA());
    context.contextInterface();
    context = new Context(new ConcreteStrategyB());
    context.contextInterface();
    context = new Context(new ConcreteStrategyC());
    context.contextInterface();
  }
}

在實(shí)際使用中阀溶,遇到需要進(jìn)行多個(gè)條件判斷的業(yè)務(wù)規(guī)則時(shí)妓羊,可以考慮采用策略模式分瘦,與簡單工廠結(jié)合,根據(jù)不同的業(yè)務(wù)規(guī)則遭京,創(chuàng)建同一個(gè)類的不同子對象做鹰,還可以與反射結(jié)合击纬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市誊垢,隨后出現(xiàn)的幾起案子掉弛,更是在濱河造成了極大的恐慌症见,老刑警劉巖喂走,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谋作,居然都是意外死亡芋肠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門遵蚜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帖池,“玉大人,你說我怎么就攤上這事吭净∷冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵寂殉,是天一觀的道長囚巴。 經(jīng)常有香客問我,道長友扰,這世上最難降的妖魔是什么彤叉? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮村怪,結(jié)果婚禮上秽浇,老公的妹妹穿的比我還像新娘。我一直安慰自己甚负,他們只是感情好柬焕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布审残。 她就那樣靜靜地躺著,像睡著了一般击喂。 火紅的嫁衣襯著肌膚如雪维苔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天懂昂,我揣著相機(jī)與錄音介时,去河邊找鬼。 笑死凌彬,一個(gè)胖子當(dāng)著我的面吹牛沸柔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铲敛,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼褐澎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伐蒋?” 一聲冷哼從身側(cè)響起工三,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎先鱼,沒想到半個(gè)月后俭正,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焙畔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年掸读,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏多。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡儿惫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伸但,到底是詐尸還是另有隱情肾请,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布更胖,位于F島的核電站铛铁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏函喉。R本人自食惡果不足惜避归,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望管呵。 院中可真熱鬧梳毙,春花似錦、人聲如沸捐下。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奸柬,卻和暖如春生年,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背廓奕。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工抱婉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桌粉。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓蒸绩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铃肯。 傳聞我的和親對象是個(gè)殘疾皇子患亿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文僅僅為入門,高手勿噴押逼。 實(shí)際工作中步藕,我們總會遇到類似如下的需求:某支付系統(tǒng)接入以下幾種商戶進(jìn)行充值:易寶網(wǎng)易,...
    JarvanMo閱讀 14,238評論 14 26
  • 二十三種設(shè)計(jì)模式 - 策略模式 策略模式簡介 模式動機(jī) 完成一項(xiàng)任務(wù)挑格,往往可以有多種不同的方式咙冗,每一種方式稱為一個(gè)...
    JustTheSame閱讀 1,831評論 2 16
  • 【學(xué)習(xí)難度:★☆☆☆☆,使用頻率:★★★★☆】直接出處:策略模式梳理和學(xué)習(xí):https://github.com/...
    BruceOuyang閱讀 1,462評論 3 5
  • 1.初識策略模式 定義一系列的算法恕齐,把它們一個(gè)個(gè)封裝起來乞娄,并且使它們可相互替換瞬逊。本模式使得算法可獨(dú)立于使用它的客戶...
    王偵閱讀 1,456評論 0 3
  • 前言 最近段時(shí)間显歧,接到一個(gè)需求:開發(fā)一個(gè)聚合支付服務(wù),對其他內(nèi)部項(xiàng)目提供統(tǒng)一的接口來實(shí)現(xiàn)不同支付平臺的支付能力發(fā)起...
    聞人的技術(shù)博客閱讀 899評論 0 5