14、策略模式(Strategy Pattern)

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

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

1)TravelStrategy类:

java 复制代码
package cn.jaa.strategy_pattern;

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

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

java 复制代码
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 ...");
    }
}
java 复制代码
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实现策略模式:

java 复制代码
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)测试策略模式:

java 复制代码
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();
    }
}

打印结果:

相关推荐
蜡笔小马18 小时前
11.设计模式实战:从创建型到结构型的全面解析
设计模式
蜡笔小马18 小时前
09.C++设计模式-外观模式
c++·设计模式·外观模式
workflower18 小时前
AI能源智慧生产与绿色开发核心场景
大数据·人工智能·设计模式·机器人·软件工程·能源
蜡笔小马18 小时前
10.C++设计模式-代理模式
c++·设计模式·代理模式
雪度娃娃19 小时前
行为型设计模式——职责链模式
c++·设计模式·责任链模式
多加点辣也没关系1 天前
设计模式-观察者模式
观察者模式·设计模式
hssfscv1 天前
软件设计师下午题训练1-3题+2019上上午题错题解析 练习真题训练13
笔记·设计模式·uml
拾-光1 天前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
多加点辣也没关系1 天前
设计模式-模板方法模式
设计模式·模板方法模式
Autumn_ing2 天前
2026实测:这5款AI生成UI工具支持Shadcn UI/Ant Design组件库
人工智能·ui·设计模式·aigc·设计规范