設計模式-行爲性設計模式:策略模式 Strategy

策略模式 就是把業務邏輯和算法分開

好處:可以額外添加一些處理,屏蔽客戶端對算法的依賴

缺點:上端必須知道所有的算法,並負責選擇算法

構成:一個策略環境 一個抽象策略和一大堆子策略


下面模擬一個簡單計算器的代碼


抽象策略代碼

 public abstract class BaseCalculation
    {
        public int leftInput;
        public int rightInput;
        public abstract int Calculation();
    }

一大堆子策略 就是加減乘除的算法

public class jia:BaseCalculation
    {
        public override int Calculation()
        {
            return leftInput + rightInput;
        }
    }
 public class jian:BaseCalculation
    {
        public override int Calculation()
        {
            return leftInput - rightInput;
        }
    }

 public class cheng:BaseCalculation
    {
        public override int Calculation()
        {
            return leftInput * rightInput;
        }
    }

 public class chu:BaseCalculation
    {
        public override int Calculation()
        {
            return leftInput / rightInput;
        }
    }


策略環境代碼

 public class Context
    {
        private BaseCalculation _Calculation = null;
        public Context(BaseCalculation calculation)
        {
            _Calculation = calculation;
        }
        public int Calculation(int leftinput,int rightinput)
        {
            _Calculation.leftInput = leftinput;
            _Calculation.rightInput = rightinput;
            return _Calculation.Calculation();
        }

    }


調用

//模擬用戶輸入兩個數字和一個運算符 
            int ileft = 1;
            int iright = 2;
            string Operator = "+";

            //模擬計算器

            int Operationresult;

            switch (Operator)
            {
                case "+":
                    {
                        BaseCalculation b = new jia();
                        Context con = new Context(b);
                        Operationresult = con.Calculation(ileft, iright);
                    }
                    break;
                case "-":
                    {
                        BaseCalculation b = new jian();
                        Context con = new Context(b);
                        Operationresult = con.Calculation(ileft, iright);
                    }
                    break;
                case "*":
                    {
                        BaseCalculation b = new cheng();
                        Context con = new Context(b);
                        Operationresult = con.Calculation(ileft, iright);
                    }
                    break;
                case "/":
                    {
                        BaseCalculation b = new chu();
                        Context con = new Context(b);
                        Operationresult = con.Calculation(ileft, iright);
                    }
                    break;
                default:
                    Operationresult = 0;
                    //拋異常 就不寫了
                    break;
            }

            Console.WriteLine("{0}{1}{2}={3}", ileft, Operator, iright, Operationresult);


結果



發佈了72 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章