14、策略模式(Strategy Pattern)

策略模式(Strategy Pattern)为同一个行为定义了不同的策略,并为每种策略都实现了不同的方法。在用户使用的时候,系统根据不同的策略自动切换不同的方法来实现策略的改变。同一个策略下的不同方法是对同一功能的不同实现,因此在使用时可以相互替换而不影响用户的使用。

以旅游交通工具的选择为例实现策略模式,UML设计图如下:

1)TravelStrategy类:

package cn.jaa.strategy_pattern;

/**
 * @Author: Jaa
 * @Description: 出行方式策略类
 * @Date 2023/12/3 9:56
 */
public interface TravelStrategy {
    public void travelMode();
}

2)TravelStrategy的两种实现方式TravelByAirStrategy和TravelByCarStrategy:

package cn.jaa.strategy_pattern;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author: Jaa
 * @Description:
 * @Date 2023/12/3 9:57
 */
@Slf4j
public class TravelByAirStrategy implements TravelStrategy {
    @Override
    public void travelMode() {
        log.info("travel by airport ...");
    }
}
package cn.jaa.strategy_pattern;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author: Jaa
 * @Description:
 * @Date 2023/12/3 9:58
 */
@Slf4j
public class TravelByCarStrategy implements TravelStrategy {
    @Override
    public void travelMode() {
        log.info("travel by car ...");
    }
}

3)Context实现策略模式:

package cn.jaa.strategy_pattern;

/**
 * @Author: Jaa
 * @Description: Context实现策略模式
 * @Date 2023/12/3 10:00
 */
public class Context {
    private TravelStrategy travelStrategy;

    public TravelStrategy getTravelStrategy() {
        return travelStrategy;
    }

    public void setTravelStrategy(TravelStrategy travelStrategy) {
        this.travelStrategy = travelStrategy;
    }

    public void travelMode() {
        this.travelStrategy.travelMode();
    }
}

4)测试策略模式:

package cn.jaa.strategy_pattern;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author: Jaa
 * @Description:
 * @Date 2023/12/3 10:02
 */
@Slf4j
public class StrategyDemoTest {

    public static void main(String[] args) {
        Context context = new Context();
        TravelByAirStrategy airStrategy = new TravelByAirStrategy();
        context.setTravelStrategy(airStrategy);
        context.travelMode();
        log.info("change air to airport ... ...");
        TravelByCarStrategy carStrategy = new TravelByCarStrategy();
        context.setTravelStrategy(carStrategy);
        context.travelMode();
    }
}

打印结果:

相关推荐

  1. 【设计模式14、strategy 策略模式

    2023-12-05 20:46:02       30 阅读
  2. 设计模式(19):策略模式

    2023-12-05 20:46:02       37 阅读
  3. 笨蛋学设计模式行为型模式-策略模式16

    2023-12-05 20:46:02       48 阅读
  4. C++11 设计模式7 策略模式 ,Strategy

    2023-12-05 20:46:02       27 阅读
  5. GPT带我学-设计模式-13策略模式

    2023-12-05 20:46:02       28 阅读
  6. ·策略模式

    2023-12-05 20:46:02       52 阅读
  7. 策略模式

    2023-12-05 20:46:02       42 阅读

最近更新

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

    2023-12-05 20:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 20:46:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 20:46:02       82 阅读
  4. Python语言-面向对象

    2023-12-05 20:46:02       91 阅读

热门阅读

  1. 什么是上采样和下采样?

    2023-12-05 20:46:02       71 阅读
  2. Halcon深度学习药片检测

    2023-12-05 20:46:02       44 阅读
  3. 25.Oracle的回收站

    2023-12-05 20:46:02       55 阅读
  4. 初识Dockerfile

    2023-12-05 20:46:02       56 阅读