Java策略模式实例分析
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"Java策略模式实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java策略模式实例分析"吧!优点1.算法可以自由切换。2.
千家信息网最后更新 2025年11月08日Java策略模式实例分析
这篇文章主要讲解了"Java策略模式实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java策略模式实例分析"吧!
优点
1.算法可以自由切换。
2.避免使用多重条件判断。
3.扩展性良好。
缺点
1.策略类会增多。
2.所有策略类都需要对外暴露。
使用场景
1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
2.一个系统需要动态地在几种算法中选择一种。
3.如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
一、实现方式
假设一个场景,我们在电商系统中,订单分为很多种,例如:普通订单,秒杀订单,拼团订单等等。我们需要创建一个订单的时候,由于订单的类型不同,我们需要根据订单的类型执行不同的业务逻辑。
1、订单类型枚举类
package com.asurplus.common.strategy;import lombok.AllArgsConstructor;import lombok.Getter;/** * 订单类型枚举类 */@Getter@AllArgsConstructorpublic enum OrderTypeEnum { COMMON(1001, "普通订单"), SECKILL(1002, "秒杀订单"), SPELL(1003, "拼团订单"); int type; String desc;}我们的订单分为三种,普通订单,秒杀订单,拼团订单。
2、订单处理接口
package com.asurplus.common.strategy;/** * 订单处理接口 */public interface OrderService { /** * 创建订单 * * @return */ void createOrder(); /** * 获取订单类型 * * @return */ OrderTypeEnum type();}3、普通订单处理器
package com.asurplus.common.strategy;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;/** * 普通订单处理器 */@Slf4j@Servicepublic class CommonOrderServiceImpl implements OrderService { @Override public void createOrder() { log.info("创建 普通订单"); } @Override public OrderTypeEnum type() { return OrderTypeEnum.COMMON; }}4、秒杀订单处理器
package com.asurplus.common.strategy;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;/** * 秒杀订单处理器 */@Slf4j@Servicepublic class SeckillOrderServiceImpl implements OrderService { @Override public void createOrder() { log.info("创建 秒杀订单"); } @Override public OrderTypeEnum type() { return OrderTypeEnum.SECKILL; }}5、拼团订单处理器
package com.asurplus.common.strategy;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;/** * 拼团订单处理器 */@Slf4j@Servicepublic class SpellOrderServiceImpl implements OrderService { @Override public void createOrder() { log.info("创建 拼团订单"); } @Override public OrderTypeEnum type() { return OrderTypeEnum.SPELL; }}6、下单管理器
package com.asurplus.common.strategy;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.util.List;import java.util.Optional;/** * 订单管理器 */@Componentpublic class OrderManager { /** * Autowired 注解的强大之处 */ @Autowired private List orderServices; /** * 创建订单 * * @param type 订单类型 * @return */ public void createOrder(int type) { /** * 根据订单类型,找到对应的处理器 */ Optional any = orderServices.stream().filter(f -> f.type().getType() == type).findAny(); /** * 没有对应的处理器 */ if (!any.isPresent()) { throw new RuntimeException("没有找到相应的订单实现"); } // 创建订单 any.get().createOrder(); }} 这里就能体现出 @Autowired 的强大之处,可以一次性自动注入多个对象。根据订单类型,选出对应的处理器来处理该订单。
二、测试
1、引入依赖
org.springframework.boot spring-boot-starter-test
2、测试用例
package com.asurplus.common.strategy;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;/** * 策略模式 */@RunWith(SpringRunner.class)@SpringBootTestpublic class TestMain { @Autowired private OrderManager orderManager; @Test public void test() { // 创建 秒杀订单 orderManager.createOrder(OrderTypeEnum.SECKILL.getType()); }}输出结果
感谢各位的阅读,以上就是"Java策略模式实例分析"的内容了,经过本文的学习后,相信大家对Java策略模式实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
订单
处理
处理器
策略
类型
模式
普通
行为
实例
实例分析
分析
对象
系统
学习
选择
不同
强大
内容
动态
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
银行网络安全宣传方案
湖南省软件开发工程师招生
移动宽带游戏服务器
互联网网络技术概况
数据库建表总结
金融科技和工业互联网哪个好
云阳服务器有补轮胎的吗
湖州创源软件开发有限公司
众应互联网科技云南亿邦通讯
1.7.10服务器
数据库文件刻录光盘
网络安全四个大字
云南代理服务器地址
上海智能网络技术开发诚信合作
云南外贸进口软件代理服务器
网络安全办法全文
网络安全色有多少种
数据库的外模式是面向用户的
物质半数致死量数据库
连接数据库的简单程序
数据库技术技术
我国网络安全市场占有率
数据库入门数据库
数据库安装路径错误
信息系统及网络安全应急预案
黑板网络技术有限公司
如何普及推广网络安全知识的举措
数据库产业
网络安全黑客撞库
上海通信软件开发工程师招聘信息