zoukankan      html  css  js  c++  java
  • 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();
            }
        }

    结果:

  • 相关阅读:
    bcdedit无法打开启动配置数据存储拒绝访问
    linux 实现两个文件指定列的替换
    Err:12 http://security.ubuntu.com/ubuntu focalupdates/main amd64 openjdk11jreheadless amd64 11.0.11+90ubuntu2~20.04 404 Not Found [IP: 91.189.88.152 80]
    SQL的经典语句(太全了)
    反射
    多线程互操作
    C# 2.0 套接字编程实例初探
    sqlserver 导出 insert (转)
    同步方法和异步方法的区别 (转)
    数组转成 位数组 这个很好用。
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14103255.html
Copyright © 2011-2022 走看看