设计模式の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(策略模式)----行为模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《英雄联盟》S13 全球总决赛资格赛 L
- 下一篇: 设计模式----java的单例模式