策略模式实战:Spring中动态选择商品处理策略的实现

概念

可以在运行时期动态的选择需要的具体策略类,处理具体的问题

组成元素

策略接口

java 复制代码
public interface GoodsStrategy {
	void handleGoods();
}

具体策略类

java 复制代码
@Service(Constants.BEAN_GOODS)
public class BeanGoodsStrategy implements GoodsStrategy {
	@Override
	public void handleGoods() {
		System.out.println("处理金豆啦~~~~~");
	}
}
java 复制代码
@Service(Constants.MEMBER_GOODS)
public class MemberGoodsStrategy implements GoodsStrategy {
	@Override
	public void handleGoods() {
		System.out.println("会员商品");
	}
}
java 复制代码
@Service(Constants.MEMBER_PLUS_GOODS)
public class MemberPlusGoodsStrategy implements GoodsStrategy {
	@Override
	public void handleGoods() {
		System.out.println("会员积分商品");
	}
}

上下文工厂类

java 复制代码
@Service
public class GoodsStrategyFactory {

    @Autowired
    private Map<String, GoodsStrategy> goodsStrategyMap;

    public GoodsStrategy getGoodsStrategy(String goodsType) {
        return goodsStrategyMap.get(goodsType);
    }
}

解释

在Spring框架中,通过 @Autowired 注入的 Map<String, GoodsStrategy> 会自动将 GoodsStrategy 接口的所有实现类注入到Map中,其中:

  • Key:Bean的名称(默认是类名首字母小写,或通过 @Component("自定义名称") 指定)。
  • Value:GoodsStrategy 接口的具体实现类的实例。

获取策略类处理业务

java 复制代码
	@Test
	void test() {
		GoodsStrategy goodsStrategy = goodsStrategyFactory.getGoodsStrategy(Constants.MEMBER_GOODS);
		if (goodsStrategy != null){
			goodsStrategy.handleGoods();
		}
	}
相关推荐
lly2024066 分钟前
C 语言中的结构体
开发语言
乡野码圣19 分钟前
【RK3588 Android12】RCU机制
java·jvm·数据库
JAVA+C语言23 分钟前
如何优化 Java 多主机通信的性能?
java·开发语言·php
编程彩机1 小时前
互联网大厂Java面试:从分布式架构到大数据场景解析
java·大数据·微服务·spark·kafka·分布式事务·分布式架构
青岑CTF2 小时前
攻防世界-Ics-05-胎教版wp
开发语言·安全·web安全·网络安全·php
Li emily2 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
小酒窝.2 小时前
【多线程】多线程打印1~100
java·多线程
君爱学习2 小时前
基于SpringBoot的选课调查系统
java
APIshop2 小时前
Java 实战:调用 item_search_tmall 按关键词搜索天猫商品
java·开发语言·数据库
血小板要健康2 小时前
Java基础常见面试题复习合集1
java·开发语言·经验分享·笔记·面试·学习方法