日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

策略模式 - OK

發(fā)布時(shí)間:2025/6/15 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 策略模式 - OK 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  策略模式(Strategy):它定義了算法家族,分別封裝起來(lái),讓他們之間可以互相替換,此模式讓算法的變化不會(huì)影響到使用算法的客戶。

  策略模式是一種定義一系列算法的方法,從概念上來(lái)看,所有這些算法完成的都是相同的工作,只是實(shí)現(xiàn)不同,它可以以相同的方式調(diào)用所有的算法,減少了各種算法類與使用算法類之間的耦合。事實(shí)上你可以將一個(gè)繼承自抽象策略類的稱為具體策略,就是策略模式中的策略1,策略2......

  策略模式的優(yōu)點(diǎn):

  策略模式的Strategy類層次為Context定義了一系列的可供重用的算法或行為。繼承有助于析取出這些算法的公共功能。策略模式的另一個(gè)優(yōu)點(diǎn)是簡(jiǎn)化了單元測(cè)試,因?yàn)槊總€(gè)算法都有自己的類,可以通過(guò)自己的接口單獨(dú)測(cè)試。

  說(shuō)了這么多,策略模式究竟解決的是什么問(wèn)題呢?

  策略模式就是用來(lái)封裝算法的,但在實(shí)踐中,我們發(fā)現(xiàn)可以用它來(lái)封裝幾乎任何類型的規(guī)則,只要在分析過(guò)程中聽到需要在不同時(shí)間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化的可能性。

  在基本策略模式中,選擇所用具體實(shí)現(xiàn)的職責(zé)由客戶端對(duì)象承擔(dān),并轉(zhuǎn)給策略模式的Context對(duì)象。

  策略模式的結(jié)構(gòu)圖:

      

  策略模式的具體實(shí)現(xiàn)代碼示例:

namespace 策略模式 {public class Program{static void Main(string[] args){Console.WriteLine("我釣了一條魚,應(yīng)該怎么煮呢?");Context context;context = new Context(new ConcreteStrategyA());  //客戶端依賴具體實(shí)現(xiàn)類了context.RunMethod();context = new Context(new ConcreteStrategyB());context.RunMethod();Console.ReadKey();}}//抽象算法類public abstract class Strategy{//算法方法public abstract void AlgorithmInterface();}//具體策略1public class ConcreteStrategyA : Strategy{public override void AlgorithmInterface(){Console.WriteLine("加水、上蒸籠、開火、清蒸!");}}//具體策略2public class ConcreteStrategyB : Strategy{public override void AlgorithmInterface(){Console.WriteLine("熱鍋、放油、紅燒!");}}//上下文public class Context{Strategy strategy;//構(gòu)造方法接收具體對(duì)象public Context(Strategy strategy){this.strategy = strategy;}//調(diào)用方法public void RunMethod(){strategy.AlgorithmInterface();}} }

?

  以上代碼感覺到了什么?策略模式不管創(chuàng)建,它做的事非常少,少到什么程度?

  你傳個(gè)對(duì)象給我,我?guī)湍阏{(diào)用這個(gè)對(duì)象的方法(這個(gè)工作主要通過(guò)Context來(lái)維護(hù)),我不管你這對(duì)象怎么創(chuàng)建,但你得給我個(gè)對(duì)象。策略模式不管對(duì)象的創(chuàng)建,那么它實(shí)質(zhì)上是什么。用類圖說(shuō)明。

  

  從上面的類圖看到一個(gè)問(wèn)題。因?yàn)?#xff0c;我調(diào)用你時(shí),我要給你傳個(gè)對(duì)象,上面的例子直接new()。因此,客戶端依賴于具體實(shí)現(xiàn)類了。

  所以,策略模式通常與一些創(chuàng)建對(duì)象的模式混合使用,比如負(fù)責(zé)維護(hù)調(diào)用具體策略的Context類搭配個(gè)簡(jiǎn)單工廠:

public class Context{Strategy strategy = null;//調(diào)用方法public void RunMethod(string type){switch (type){default:case "清蒸":strategy = new ConcreteStrategyA();break;case "紅燒":strategy = new ConcreteStrategyB();break;}strategy.AlgorithmInterface();}}

  這樣外部就依賴Context類了:

static void Main(string[] args){Console.WriteLine("我釣了一條魚,應(yīng)該怎么煮呢?");Context context = new Context();context.RunMethod("清蒸");context.RunMethod("紅燒");Console.ReadKey();}

  最后回顧一下:

  策略模式不管對(duì)象創(chuàng)建,它的目的在于封裝不同的算法,根據(jù)傳入的對(duì)象,調(diào)用具體的策略方法,在上面的示例程序加入簡(jiǎn)單工廠模式的原因,是因?yàn)橐獎(jiǎng)?chuàng)建對(duì)應(yīng)的具體類,要分清哪些代碼屬于哪個(gè)模式的范疇。

  搞了半天,策略模式就是一個(gè)類封裝一個(gè)算法,實(shí)現(xiàn)一個(gè)算法接口,然后搞個(gè)Context來(lái)調(diào)用這些算法。

總結(jié)

以上是生活随笔為你收集整理的策略模式 - OK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。