策略模式实战: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();
		}
	}
相关推荐
paopaokaka_luck17 分钟前
基于Spring Boot+Vue的吉他社团系统设计和实现(协同过滤算法)
java·vue.js·spring boot·后端·spring
Flobby5291 小时前
Go语言新手村:轻松理解变量、常量和枚举用法
开发语言·后端·golang
nbsaas-boot2 小时前
SQL Server 窗口函数全指南(函数用法与场景)
开发语言·数据库·python·sql·sql server
东方佑2 小时前
递归推理树(RR-Tree)系统:构建认知推理的骨架结构
开发语言·r语言·r-tree
Warren982 小时前
Java Stream流的使用
java·开发语言·windows·spring boot·后端·python·硬件工程
伍哥的传说2 小时前
Radash.js 现代化JavaScript实用工具库详解 – 轻量级Lodash替代方案
开发语言·javascript·ecmascript·tree-shaking·radash.js·debounce·throttle
xidianhuihui3 小时前
go install报错: should be v0 or v1, not v2问题解决
开发语言·后端·golang
架构师沉默3 小时前
Java优雅使用Spring Boot+MQTT推送与订阅
java·开发语言·spring boot
tuokuac3 小时前
MyBatis 与 Spring Boot版本匹配问题
java·spring boot·mybatis
zhysunny4 小时前
05.原型模式:从影分身术到细胞分裂的编程艺术
java·原型模式