策略模式

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

优点: 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);
        }
    }
}
相关推荐
lwf00616414 小时前
解决macOS .dmg 文件无法安装问题
macos·策略模式
草莓熊Lotso2 天前
手搓工业级 C++ 线程安全日志系统:基于策略模式解耦,兼容 glog 使用风格
linux·运维·服务器·数据库·c++·安全·策略模式
蜜汁小强2 天前
macOS 开发者的 tmux 实战配置:分屏导航、vi 复制模式与系统剪贴板一站打通
macos·策略模式
AC赳赳老秦3 天前
OpenClaw与系统环境冲突:Windows/Mac系统兼容问题解决指南
开发语言·python·产品经理·策略模式·pygame·deepseek·openclaw
筱璦3 天前
C#期货分仓、策略交易模拟演示系统(含资源下载)
开发语言·c#·策略模式·量化交易·期货交易
艾莉丝努力练剑3 天前
【Linux线程】Linux系统多线程(八):<策略模式>日志系统的封装实现
linux·运维·服务器·c++·学习·策略模式
云空5 天前
《OpenClaw(macOS版)部署与使用中的安全问题及解决方案》
安全·macos·策略模式
Rsun045516 天前
13、Java 策略模式从入门到实战
java·bash·策略模式
小杍随笔7 天前
【Rust 1.95.0 正式发布!语言特性、标准库、平台支持全面升级,一文带你看完整更新】
开发语言·rust·策略模式
程序员老邢8 天前
【技术底稿 14】通用文件存储组件:SpringBoot 自动装配 + 多存储适配
java·spring boot·后端·阿里云·微服务·策略模式