当前位置: 首页 > article >正文

策略模式在项目中实际应用

Java策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。在Java中实现策略模式,通常包含三个角色:
策略接口:定义了一个公共接口,所有的具体策略类都必须实现这个接口。
具体策略类:实现了策略接口中定义的方法,每一个具体策略类都封装了一种具体的算法或行为。
上下文类:持有一个策略对象的引用,并负责调用其方法来执行相应的算法或行为。上下文类还可以维护对策略对象的引用,并可在运行时动态地改变所使用的策略对象。

  1. 上下文本类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class StrategyContext {
	// 保证线程安全
    private final Map<String, CommonStrategyService> strategyServiceMap = new ConcurrentHashMap<>();

    @Autowired
    public void strategyInterface(Map<String, CommonStrategyService> strategyServiceMap) {
        this.strategyServiceMap.clear();
        strategyServiceMap.forEach(this.strategyServiceMap::put);
    }

    public CommonStrategyService getStrategy(String str) {
        if (str.equals("A")) {
            return this.strategyServiceMap.get(str);
        } else if (str.equals("B")) {
            return this.strategyServiceMap.get(str);
        } else {
            return this.strategyServiceMap.get("COMMON");
        }
    }
}

  1. 策略接口
public interface CommonStrategyService {
    void getTest();

    boolean success();
}

  1. 具体策略类
@Service(value = "A")
public class AStrategyServiceImpl implements CommonStrategyService{
    @Override
    public void getTest() {

    }

    @Override
    public boolean success() {
        return false;
    }
}
@Service(value = "B")
public class BStrategyServiceImpl implements CommonStrategyService{
    @Override
    public void getTest() {

    }

    @Override
    public boolean success() {
        return false;
    }
}
@Service(value = "COMMON")
public class CommonStrategyServiceImpl implements CommonStrategyService{
    @Override
    public void getTest() {

    }

    @Override
    public boolean success() {
        return false;
    }
}
  1. 测试
@Service
public class StrategyTest {
    @Autowired
    private StrategyContext strategyContext;

    public void test() {
        strategyContext.getStrategy("A").getTest();
        strategyContext.getStrategy("B").success();
    }
}

http://www.kler.cn/news/274395.html

相关文章:

  • springboot企业级抽奖项目-整体展示
  • 腾讯云服务器多少钱一个月?5元1个月,这价格没谁了
  • linux单机部署hadoop
  • RK3588_Qt交叉编译环境搭建
  • jenkins 连接harbor 推送镜像
  • 简单对已有云服务器进行linux环境搭建以及共享服务器
  • Nginx安装和平滑升级
  • 流畅的Python(二十一)-类元编程
  • 框架篇常见面试题
  • mysql重构
  • Livox激光雷达 mid360 跑 fastlio2 - 流程记录
  • Day23 二叉树09
  • 晶圆制造过程中常用载具的类型
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.03.10-2024.03.15
  • QT自定义带参数信号与槽函数
  • PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包
  • im-system学习
  • 嵌入式学习-ARM-Day4
  • 【FPGA】摄像头模块OV5640
  • Linux系统及操作 (05)