【设计模式】策略模式

目录

什么是策略模式

代码实现


什么是策略模式

策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装成一个独立的对象,使得它们可以相互替换。

在策略模式中,通常有三个角色:

  1. 环境类(Context): 它负责维护一个对策略对象的引用,并在需要时调用策略对象的方法。环境类通常提供一个方法来设置和修改当前所采用的策略。

  2. 抽象策略接口(Strategy): 它定义了一个算法的抽象接口,声明了算法的方法。

  3. 具体策略类(Concrete Strategy): 它实现了抽象策略接口,定义了具体的算法实现。

策略模式的关键在于将算法封装成独立的策略对象,并使得这些策略对象可以相互替换。这样,客户端代码只需要与策略接口交互,而不需要关心具体的算法实现,从而实现了算法与客户端代码的解耦。

策略模式的优点包括:

  • 灵活性: 策略模式使得算法的变化独立于使用算法的客户端,客户端可以根据需要动态地选择和切换算法。
  • 复用性: 策略模式将算法封装成独立的策略对象,使得可以更容易地复用算法。
  • 扩展性: 策略模式可以很容易地新增新的算法,并且无需修改现有的客户端代码。

然而,策略模式也存在一些缺点,例如增加了类的数量和复杂性,以及需要客户端了解各种策略之间的差异和选择合适的策略等。

下面我们使用java代码来实现一个策略模式,走你~~~

代码实现

java 复制代码
// 定义策略接口
interface Strategy {
    int doOperation(int num1, int num2);
}

// 具体策略类:加法策略
class AddStrategy implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

// 具体策略类:减法策略
class SubtractStrategy implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

// 具体策略类:乘法策略
class MultiplyStrategy implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}

// 环境类
class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 创建具体策略实例
        Strategy addStrategy = new AddStrategy();
        Strategy subtractStrategy = new SubtractStrategy();
        Strategy multiplyStrategy = new MultiplyStrategy();

        // 创建环境实例,并设置具体策略
        Context context = new Context(addStrategy);

        // 调用环境的方法执行具体策略
        int result1 = context.executeStrategy(10, 5);
        System.out.println("10 + 5 = " + result1);

        // 修改环境的策略为减法策略
        context = new Context(subtractStrategy);
        int result2 = context.executeStrategy(10, 5);
        System.out.println("10 - 5 = " + result2);

        // 修改环境的策略为乘法策略
        context = new Context(multiplyStrategy);
        int result3 = context.executeStrategy(10, 5);
        System.out.println("10 * 5 = " + result3);
    }
}

效果如图:

非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~

相关推荐
博风2 小时前
9、设计模式应用举例:责任链模式:计算阶乘
设计模式·责任链模式
电子IT笔记4 小时前
人走了,记录不能“空白”: MES×HR 离职人员下拉回显实战
设计模式
智慧城市20307 小时前
关键供应商连续交付不合格批次,说明质量风险可能持续存在。企业需要建立“批次隔离、加严检验、驻厂遏制、复检放行、供应商升级”的处置闭环,同时统筹保供。
数据分析·策略模式·战略咨询·流程管理
博风1 天前
8、设计模式应用举例:适配器模式:Iterator接口与Enumeration接口
设计模式·适配器模式
高晶1 天前
ARM 嵌入式 Linux 系统 U-Boot 开发与移植实战M
设计模式·程序员
happy_baymax1 天前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码1 天前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
geovindu1 天前
rust: Chain of Responsibility Pattern
开发语言·后端·设计模式·rust·责任链模式·行为模式
拆房老料1 天前
【第四部分:Agentic 智能体设计模式】15.为什么 Agent 也需要设计模式
人工智能·设计模式·ai·ai-native
geovindu1 天前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式