日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

策略模式 - OK

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

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

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

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

  策略模式的Strategy類層次為Context定義了一系列的可供重用的算法或行為。繼承有助于析取出這些算法的公共功能。策略模式的另一個優(yōu)點是簡化了單元測試,因為每個算法都有自己的類,可以通過自己的接口單獨測試。

  說了這么多,策略模式究竟解決的是什么問題呢?

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

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

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

      

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

namespace 策略模式 {public class Program{static void Main(string[] args){Console.WriteLine("我釣了一條魚,應(yīng)該怎么煮呢?");Context context;context = new Context(new ConcreteStrategyA());  //客戶端依賴具體實現(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)造方法接收具體對象public Context(Strategy strategy){this.strategy = strategy;}//調(diào)用方法public void RunMethod(){strategy.AlgorithmInterface();}} }

?

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

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

  

  從上面的類圖看到一個問題。因為,我調(diào)用你時,我要給你傳個對象,上面的例子直接new()。因此,客戶端依賴于具體實現(xiàn)類了。

  所以,策略模式通常與一些創(chuàng)建對象的模式混合使用,比如負責維護調(diào)用具體策略的Context類搭配個簡單工廠:

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();}

  最后回顧一下:

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

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

總結(jié)

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

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

主站蜘蛛池模板: 香蕉a视频| 永久av免费在线观看 | 国产日韩在线看 | 欧美日韩在线观看一区二区三区 | 色老头av| 国产av人人夜夜澡人人爽麻豆 | 国产精品免费视频一区二区三区 | 最新日韩在线 | 久久综合av | 天天爽av | 亚洲aaaa级特黄毛片 | 91在线精品秘密一区二区 | 中文字幕 日本 | 亚洲黄色一区二区三区 | 性爱一级视频 | 亚洲精品免费网站 | 亚洲熟妇无码乱子av电影 | 97精品久久 | 日韩视频三区 | 欧美激情一区二区三区免费观看 | 欧美日韩人妻精品一区二区 | 四虎永久免费在线观看 | 天天干天天插天天射 | 久久中文娱乐网 | 亚洲国产无码精品 | 国产喷水视频 | 国产精品美女视频 | 国产高清在线免费观看 | 国产又黄又粗又猛又爽的视频 | 狠狠操天天干 | 精品三区 | 成人在线精品视频 | 性猛交富婆╳xxx乱大交天津 | 91波多野结衣 | 亚欧洲精品视频 | av网页在线观看 | 日韩精品一区二区三区久久 | 美女一区二区三区视频 | 成人av片在线观看 | 国产激情四射 | 久久久久久毛片 | 亚洲一区二区三区激情 | 草草影院地址 | 波多野结衣一区二区三区高清av | 久久精品av | 欧美日韩一级二级 | 午夜dv内射一区二区 | 色综合久久av| 在线观看视频你懂得 | 久久久久久av | 色网在线免费观看 | 少妇肥臀大白屁股高清 | www.超碰97.com| 91狠狠干| 欧美色综合网站 | 色婷在线 | 日本一级片免费看 | 久久天天躁狠狠躁夜夜av | 奶罩不戴乳罩邻居hd播放 | 久久久久久无码精品人妻一区二区 | 中文字幕视频观看 | 国产女人呻吟高潮抽搐声 | 国产操操操 | 亚欧激情 | 国产xxxxwwww | 天天久久综合网 | 成人福利一区二区三区 | 日韩福利视频在线观看 | 日本在线观看一区二区 | 97在线观看视频 | 亚洲熟妇国产熟妇肥婆 | 麻豆国产一区二区三区四区 | xxxxhdvideos | 男人的天堂影院 | 人妻熟女一区二区三区 | 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 337p日本欧洲亚洲大胆精筑 | 欧美激情图片 | 亚州av综合色区无码一区 | 亚洲美女一区二区三区 | 精品免费观看 | 日本午夜免费福利视频 | 亚洲欧美日韩国产综合 | 欧洲精品久久 | 中文亚洲欧美 | 丰满人妻一区二区三区四区 | 午夜伦理在线观看 | 97成人免费 | 男女污污软件 | 夜夜天天干 | 欧美精品久久天天躁 | 一区二区三区在线观 | 韩国裸体网站 | 精品国产99一区二区乱码综合 | 中文字幕在线天堂 | 欧美成人黄色小视频 | 亚洲乱码国产乱码精品精的特点 | 国产91在线看 | 丝袜 亚洲 另类 欧美 重口 |