策略模式实战: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();
		}
	}
相关推荐
小碗羊肉20 小时前
【从零开始学Java | 第三十一篇下】Stream流
java·开发语言
❀͜͡傀儡师21 小时前
Spring AI Alibaba vs. AgentScope:两个阿里AI框架,如何选择?
java·人工智能·spring
aq553560021 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
一 乐21 小时前
酒店预订|基于springboot + vue酒店预订系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·酒店预订系统
报错小能手21 小时前
ios开发方向——swift错误处理:do/try/catch、Result、throws
开发语言·学习·ios·swift
Moe48821 小时前
Spring AI Advisors:从链式增强到递归顾问
java·后端
敖正炀21 小时前
ReentrantReadWriteLock、ReentrantLock、synchronized 对比
java
网域小星球1 天前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目
cike_y1 天前
Java反序列化漏洞-Shiro721流程分析
java·反序列化·shiro框架
aq55356001 天前
三大编程语言深度对比:C# vs 易语言 vs 汇编
开发语言·汇编·c#