《每天一點(diǎn)Java知識(shí)》設(shè)計(jì)模式——策略模式

策略模式的概念圖

策略模式源來(lái)

在生活中,實(shí)現(xiàn)一個(gè)目標(biāo)有多種方式方法,也就是有多種策略。可以用if-else來(lái)簡(jiǎn)單的判斷,但是當(dāng)條件變多,并且條件變復(fù)雜后,耦合會(huì)十分的高,邏輯混亂不夠清晰。
所以就產(chǎn)生了策略模式。
首先有一個(gè)上下文類Context,這個(gè)類持有一個(gè)策略的類引用 Strategy,并且有一個(gè)set方法。

public Class Context{
  Strategy strategy;
  public void Context(Strategy strategy){
  this.strategy=strategy;
  }
  public void doSomething(){
    strategy.doSomething();  
  }
}

然后將Strategy當(dāng)做接口類,聲明必須要實(shí)現(xiàn)的方法doSomething(),實(shí)現(xiàn)它的多個(gè)策略子類。

public inteface Strategy{
  public void doSomething();
}
public Class OneStrategy implement Strategy{
  public void doSomething(){
     System.out.println("one");
  }
}
public Class TwoStrategy implement Strategy{
  public void doSomething(){
     System.out.println("two");
  }
}

最后使用策略O(shè)neStrategy來(lái)解決問(wèn)題。

public void main(){
  Context context=new Context(new OneStrategy);
  context.doSomething();
}

若要是用策略TwoStrategy,將TwoStrategy 傳遞進(jìn)Context中即可。

核心思路是,持有接口引用,使用實(shí)現(xiàn)接口的具體類來(lái)覆蓋其方法,可擴(kuò)展性和維護(hù)性極強(qiáng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 股票大作手回憶錄里記錄了利弗莫爾投資生涯中犯過(guò)的錯(cuò)誤,小到損失本金,大到負(fù)債破產(chǎn),真金白銀換來(lái)的經(jīng)驗(yàn)教訓(xùn)在今天依然...
    從小白到精通閱讀 446評(píng)論 0 2
  • 慢慢挪開(kāi)時(shí)光的軒窗 探頭出去看看遠(yuǎn)方 原來(lái) 不知不覺(jué)間 已經(jīng)悄悄越過(guò)了五月的頸部 即將迎來(lái)六月的眉稍 就在這五月末...
    一個(gè)叫李柯的女孩閱讀 264評(píng)論 0 2
  • 今天收到一個(gè)種子花開(kāi)的驚喜,那就是我找到了一個(gè)英語(yǔ)語(yǔ)境下生活的的學(xué)友,一起結(jié)對(duì)子學(xué)英語(yǔ),事實(shí)上我是困難戶,我的學(xué)友...
    寸心潔白閱讀 216評(píng)論 0 2
  • 作為一名大四應(yīng)屆生,終于知道簡(jiǎn)歷石沉大海是什么個(gè)體會(huì)。 看到了好幾個(gè)“不匹配”反饋是這么寫(xiě)的: 建議參考STAR法...
    gyt95閱讀 9,038評(píng)論 0 2
  • TO.柴姑 2016年又要到最后一個(gè)月了,年初的愿望還歷歷在目,新學(xué)期的誓言還寫(xiě)在本本上。這個(gè)學(xué)期就又要過(guò)去了。成...
    一塊甜糕閱讀 328評(píng)論 3 1