策略模式

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

优点: 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);
        }
    }
}
相关推荐
代码小书生20 小时前
shutil,一个文件操作的 Python 库!
开发语言·python·策略模式
ting945200020 小时前
ModelHub 深度技术解析:macOS 原生菜单栏 LLM 模型管理工具,补齐 Ollama/MLX/LM Studio 生态短板
人工智能·macos·架构·策略模式
张小姐的猫21 小时前
【Linux】多线程实战 —— 日志类 | 策略模式
linux·运维·服务器·c++·bash·策略模式
老码观察2 天前
设计模式实战解读(五):策略模式——干掉 if-else 的优雅方案
java·设计模式·策略模式
无聊的老谢3 天前
构建高扩展性的动态指标计算引擎:策略模式与表达式树的实战应用
java·策略模式·计算引擎
IT空门:门主3 天前
Java 设计模式实战:模板方法 + 工厂 + 策略模式重构支付系统
java·设计模式·策略模式
c++之路4 天前
策略模式(Strategy Pattern)
策略模式
一个在高校打杂的8 天前
honeypot之opencanary(轻量化蜜罐)
linux·网络安全·网络攻击模型·安全威胁分析·策略模式
蜡笔小马9 天前
13.C++设计模式-策略模式
c++·设计模式·策略模式
杜子不疼.10 天前
【C++ AI 大模型接入 SDK】 - LLMProvider 抽象基类与策略模式
开发语言·c++·策略模式