设计模式-行为性设计模式:策略模式 Strategy

来源:互联网 发布:unknown网络 编辑:程序博客网 时间:2024/06/10 04:46

策略模式 就是把业务逻辑和算法分开

好处:可以额外添加一些处理,屏蔽客户端对算法的依赖

缺点:上端必须知道所有的算法,并负责选择算法

构成:一个策略环境 一个抽象策略和一大堆子策略


下面模拟一个简单计算器的代码


抽象策略代码

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


结果



0 0
原创粉丝点击