策略模式实战: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();
		}
	}
相关推荐
小菜全21 分钟前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架
人衣aoa21 分钟前
Python编程基础(八) | 类
开发语言·python
晚云与城29 分钟前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++
当归102431 分钟前
SQL Server死锁排查实战指南
java·服务器·网络
小莞尔34 分钟前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
张烫麻辣亮。34 分钟前
golang-gin包
开发语言·golang·gin
echoyu.35 分钟前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
little_xianzhong38 分钟前
关于对逾期提醒的定时任务~改进完善
java·数据库·spring boot·spring·mybatis
yuluo_YX42 分钟前
Go Style 代码风格规范
开发语言·后端·golang
百锦再44 分钟前
脚本语言的大浪淘沙或百花争艳
java·开发语言·人工智能·python·django·virtualenv·pygame