设计模式-策略模式

在Java中实现策略模式,可以通过定义一个策略接口和多个具体策略类,然后在上下文类中使用这些策略。以下是一个简单的Java策略模式示例:

策略接口

// 策略接口
public interface Strategy {
    void algorithmInterface();
}

具体策略类

// 具体策略A
public class ConcreteStrategyA implements Strategy {
    @Override
    public void algorithmInterface() {
        System.out.println("Algorithm A");
    }
}

// 具体策略B
public class ConcreteStrategyB implements Strategy {
    @Override
    public void algorithmInterface() {
        System.out.println("Algorithm B");
    }
}

上下文类

// 上下文类
public class Context {
    private Strategy strategy;

    // 设置策略
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    // 执行策略
    public void executeStrategy() {
        strategy.algorithmInterface();
    }
}

客户端代码

public class StrategyPatternDemo {
    public static void main(String[] args) {
        Context context = new Context();

        // 使用策略A
        context.setStrategy(new ConcreteStrategyA());
        context.executeStrategy();  // 输出: Algorithm A

        // 使用策略B
        context.setStrategy(new ConcreteStrategyB());
        context.executeStrategy();  // 输出: Algorithm B
    }
}

运行结果

Algorithm A
Algorithm B

解释

  1. Strategy 接口:定义了一个算法接口 algorithmInterface
  2. ConcreteStrategyA 和 ConcreteStrategyB:实现了 Strategy 接口,提供了具体的算法实现。
  3. Context 类:持有一个 Strategy 对象,并通过 setStrategy 方法来设置具体的策略。通过 executeStrategy 方法来执行当前策略的算法。
  4. StrategyPatternDemo:客户端代码,演示了如何使用不同的策略。

通过这种方式,可以在运行时动态地改变对象的行为,而无需修改上下文类的代码。

相关推荐

  1. 设计模式——策略模式

    2024-07-23 08:00:02       56 阅读
  2. 设计模式-策略模式

    2024-07-23 08:00:02       67 阅读
  3. 设计模式——策略模式

    2024-07-23 08:00:02       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 08:00:02       169 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 08:00:02       185 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 08:00:02       155 阅读
  4. Python语言-面向对象

    2024-07-23 08:00:02       169 阅读

热门阅读

  1. 深入解析Memcached:C#中的应用与实战案例

    2024-07-23 08:00:02       35 阅读
  2. Python subprocess.call - 将变量添加到 subprocess.call

    2024-07-23 08:00:02       29 阅读
  3. 释放分布式系统潜能:Mojo模型的集成与应用

    2024-07-23 08:00:02       37 阅读
  4. 精准控制构建流程:Gradle中onlyIf条件的高级应用

    2024-07-23 08:00:02       32 阅读
  5. github搜索指令

    2024-07-23 08:00:02       37 阅读
  6. Oracle(18)什么是序列(Sequence)?

    2024-07-23 08:00:02       35 阅读