策略模式

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

优点: 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);
        }
    }
}
相关推荐
T0uken5 天前
【Mac】WireGuard:使用 launchd 管理服务
macos·策略模式
橘色的喵6 天前
嵌入式C语言编程:策略模式、状态模式和状态机的应用
c语言·状态模式·策略模式·状态机
Code blocks8 天前
SpringBoot中策略模式使用
java·spring boot·后端·mybatis·策略模式
Yang-Never9 天前
设计模式 -> 策略模式(Strategy Pattern)
android·开发语言·设计模式·kotlin·android studio·策略模式
pointers_syc10 天前
【设计模式】2.策略模式
java·设计模式·策略模式
oioihoii10 天前
在macOS上使用VS Code和Clang配置C++开发环境
c++·macos·策略模式
ghostwritten11 天前
macOS安装配置Unbound DNS完整指南
macos·策略模式·dns
超龄超能程序猿11 天前
Vue3 + Electron 技术栈下 MAC 地址获取的方法、准确性优化与应对策略
macos·electron·策略模式
万粉变现经纪人12 天前
如何解决pip安装报错ModuleNotFoundError: No module named ‘dash’问题
python·scrapy·pycharm·flask·pip·策略模式·dash
IT小白架构师之路13 天前
常用设计模式系列(十六)—策略模式
设计模式·bash·策略模式