C# 设计模式(22)策略模式

策略模式

代码实现:

计算服务类:

namespace StrategyPattern.Service
{
    public interface ICalculation
    {
       public int Calculate(int data1,int data2);
    }
    public class Plus:ICalculation
    {
        public int Calculate(int data1, int data2)
        {
            int ret= data1 + data2;
            Console.WriteLine($"{data1}+{data2}={ret}");
            return ret;
        }
    }
    public class Subtract : ICalculation
    {
        public int Calculate(int data1, int data2)
        {
            int ret = data1 - data2;
            Console.WriteLine($"{data1}-{data2}={ret}");
            return ret;
        }
    }
    public class Multiply : ICalculation
    {
        public int Calculate(int data1, int data2)
        {
            int ret = data1 * data2;
            Console.WriteLine($"{data1}*{data2}={ret}");
            return ret;
        }
    }
    public class Division:ICalculation
    {
        public int Calculate(int data1, int data2)
        {
            int ret = data1 / data2;
            Console.WriteLine($"{data1}/{data2}={ret}");
            return ret;
        }
    }
}

计算上下文:

    public class CalculateContext
    {
        private readonly ICalculation _calculation;
        private readonly int _data1;
        private readonly int _data2;

        public CalculateContext(ICalculation calculation, int data1,int data2)
        {
            _calculation = calculation;
            _data1 = data1;
            _data2 = data2;
        }

        public void DoAction()
        {
            _calculation.Calculate(_data1, _data2);
        }
    }

代码调用:

    class Program
    {
        static void Main(string[] args)
        {
            int data1, data2;
            Console.WriteLine("整数二元运算...");
            Console.WriteLine("请输入第一个整数:");
            while (!int.TryParse(Console.ReadLine(), out data1))
            {
                Console.WriteLine("请重新输入第一个整数:");
            }

            Console.WriteLine("请选择运算符:+ - * /");
            string[] ops =new string[] {"+","-","*","/"};
            string op="";
            op= Console.ReadLine();
            while (!ops.Contains(op))
            {
                Console.WriteLine("请重新输入运算符:+ - * / ");
                op = Console.ReadLine();
            }

            Console.WriteLine("请输入第二个整数:");
            while (!int.TryParse(Console.ReadLine(), out data2))
            {
                Console.WriteLine("请重新输入第二个整数:");
            }

            ICalculation calculation = null;
            if (op == "+")
            {
                 calculation = new Plus();
            }
            else if (op == "-")
            {
                calculation = new Subtract();
            }
            else if (op == "*")
            {
                calculation = new Multiply();
            }
            else if (op == "/")
            {
                calculation = new Division();
            }
            CalculateContext calculateContext = new CalculateContext(calculation,data1, data2);
            calculateContext.DoAction();
        }
    }

结果:

 

posted @ 2020-12-08 16:15  NiKaFace  阅读(170)  评论(0编辑  收藏  举报