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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式のStrategyPattern(策略模式)----行为模式

發布時間:2023/12/2 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式のStrategyPattern(策略模式)----行为模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題產生背景

? ? ? ?當我們進行一系列處理時(員工工資核算,會員管理,計算器,優惠活動),會有很多相似的算法和處理過程,只是由于具體的算法的差異,導致必須不同處理。這些處理和客戶端無關,我們可以把這些算法抽象,然后進行處理。之所以叫策略,基本含義就是

針對一個問題,采用一種處理策略。

二、策略模式的通常做法

? ? ?1、將類似的算法分離,并抽象。

? ? ?2、客戶端選擇算法(可以結合簡單工廠模型,將矛盾轉移到別的類里面)

? ? ?3、Context調用算法。(Context是業務處理過程中的全部業務信息)

三、具體實例

我想要實現一個簡單的計算器功能,首先我要面對的是+、-、*、/四則運算四個算法,我們可以將它抽象

public abstract class AbstractCalculation{public void Show(){Console.WriteLine("這里是一個具體的計算");}public abstract int Calculation(int iInputLeft, int iInputRight);}

然后實現各個具體的運算(以+為示例,其它類似)

public class Plus : AbstractCalculation{public override int Calculation(int iInputLeft, int iInputRight){return iInputLeft + iInputRight;}}

這樣我們的抽象工作就完成了。

下面我們寫上下文類(Context,包含業務處理的全部信息,變量以及操作)

public class Context{private int LeftOperator = 0;private int RightOperator = 0;private AbstractCalculation calculation = null;public Context(AbstractCalculation calculation, int iInputLeft, int iInputRight){this.calculation = calculation;LeftOperator = iInputLeft;RightOperator = iInputRight;}public int Calculate(){Console.WriteLine("Start Calculate");try{return calculation.Calculation(LeftOperator, RightOperator);}catch (Exception ex){throw ex;}}}

我們為了簡化客戶端,采用簡單工廠模式將選擇的矛盾轉義到SimpleFactory中

public class SimpleFactory{public static AbstractCalculation CreateCalculation(string oper){switch (oper){case "+":return new Plus();case "-":return new Minus();case "*":return new Mutiply();case "/":return new Division();default:throw new Exception("不支持的操作!");}}}

最后進行組合調用:

class Program{static void Main(string[] args){Console.WriteLine("策略模式Demo");int intResult = 0;int leftOperator;int rightOperator;string oper;while (true){Console.WriteLine("請輸入第一個操作數:");leftOperator = Convert.ToInt32( Console.ReadLine());Console.WriteLine("請輸入操作符:");oper = Console.ReadLine();Console.WriteLine("請輸入第二個操作數:");rightOperator = Convert.ToInt32(Console.ReadLine());AbstractCalculation calculation = SimpleFactory.CreateCalculation(oper);Context context = new Context(calculation, leftOperator, rightOperator);intResult = context.Calculate();Console.WriteLine("{0}{1}{2}={3}",leftOperator,oper,rightOperator,intResult);}}}

四、設計模式分析

優點:a、將與具體業務無關的算法分離,便于添加。通常的,因為面向對象語言的最小單位是類,我們最好是添加算法類,而不是修改算法類。

? ? ? ? ? ?b、由于context層將算法分離,因此可以添加一些其他渠道的參數,或者添加特殊處理,或者添加日志等。

缺點:并沒有解決需要選擇算法的矛盾,因此需要結合其他的設計模式處理,就像本利中添加了一個簡單工廠,將矛盾從客戶端轉移,如果需要進一步處理,可以采用反射+配置文件的方式,或者依賴注入。

代碼鏈接

?

?

? ? ??

轉載于:https://www.cnblogs.com/xietianjiao/p/8057594.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。