策略模式

定义: 策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

cs 复制代码
namespace ConsoleApp1
{
    //定义抽象策略
    public interface IStrategy
    {
         float calc(int num1, int num2);
    }
    //定义具体策略
    //加法
    public class AddStrategy : IStrategy
    {
        public float calc(int num1, int num2)
        {
            return num1 + num2;
        }
    }
    //减法
    public class SubstractStrategy : IStrategy
    {
        public float calc(int num1, int num2)
        {
            return num1 - num2;
        }
    }
    //乘法
    public class MultiplicationStrategy : IStrategy
    {
        public float calc(int num1, int num2)
        {
            return num1 * num2;
        }
    }
    //除法
    public class DivisionStrategy : IStrategy
    {
        public float calc(int num1, int num2)
        {
            return num1 / num2;
        }
    }
    //处理环境
    public class Environment
    {
        private IStrategy strategy;
        public Environment(IStrategy strategy)
        {
            this.strategy = strategy;
        }
        public float calculate(int a, int b)
        {
            return strategy.calc(a, b);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Environment environment = new Environment(new AddStrategy());
            float result = environment.calculate(20, 5);
            Console.WriteLine("计算结果:" + result);

            Environment environment1 = new Environment(new SubstractStrategy());
            float result1 = environment1.calculate(20, 5);
            Console.WriteLine("计算结果:" + result1);

            Environment environment2 = new Environment(new MultiplicationStrategy());
            float result2 = environment2.calculate(20, 5);
            Console.WriteLine("计算结果:" + result2);

            Environment environment3 = new Environment(new DivisionStrategy());
            float result3 = environment3.calculate(20, 5);
            Console.WriteLine("计算结果:" + result3);
        }
    }
}
相关推荐
goldfishsky3 小时前
设计模式-工厂模式和策略模式
设计模式·策略模式
猫头虎4 小时前
MacBookPro上macOS安装第三方应用报错解决方案:遇到:“无法打开“XXX”,因为Apple无法检查其是否包含恶意软件 问题如何解决
macos·开源软件·mac·策略模式·远程工作·软件需求·安全架构
Auc241 天前
物流项目第五期(运费计算实现、责任链设计模式运用)
java·设计模式·策略模式
Auc241 天前
物流项目第六期(短信微服务——对接阿里云第三方短信服务JAVA代码实现、策略模式 + 工厂模式的应用)
java·阿里云·微服务·架构·策略模式·工厂模式
Auc242 天前
物流项目第四期(运费模板列表实现)
java·windows·docker·微服务·架构·策略模式
蓝瓶电液3 天前
星际争霸小程序:用Java实现策略模式的星际大战
java·开发语言·策略模式
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。3 天前
卸载云枢(MacOS 版)
macos·策略模式
爱晒太阳的小老鼠3 天前
策略模式-枚举实现
java·策略模式
wu~9704 天前
手撕四种常用设计模式(工厂,策略,代理,单例)
java·单例模式·设计模式·代理模式·抽象工厂模式·策略模式
xiaolin03335 天前
【设计模式】- 行为型模式1
设计模式·状态模式·责任链模式·策略模式·命令模式·模板方法模式·行为型模式