Java策略模式实例分析
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要讲解了"Java策略模式实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java策略模式实例分析"吧!优点1.算法可以自由切换。2.
千家信息网最后更新 2024年09月22日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 ListorderServices; /** * 创建订单 * * @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安全错误
数据库的锁怎样保障安全
新三板公司翻译软件开发
网络安全小组组长副组长
登山赛车数据库
西工大与东南大学网络安全
数据库技术与应用深入洞悉
按键精灵列表框添加数据库
承接软件开发话术
如何访问另一台机子数据库
图书馆服务器管理需求
时钟同步服务器地址
腾讯软件开发
育婴软件开发策划书
精睿网络安全工程师
苹果域名根服务器
怎么把图片弄成一个数据库
网络安全职业道德的职业守则
excel数据库导入导出
两个串口服务器通过网线连接
手机网络安全检查自查知识要点
淮安制造业仓库管理软件开发
山东移动支付宝数据库
服务器 支持flv
宝鸡网络技术费用
命名数据库
数据库查询某日期之前
软件开发格局变动
电脑服务器下
印度行政支出统计数据库
c 数据库附加
电讯网络安全与网络安全的区别