设计模式-行为性设计模式:策略模式 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);


结果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值