Java策略模式实例分析
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要讲解了"Java策略模式实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java策略模式实例分析"吧!优点1.算法可以自由切换。2.
千家信息网最后更新 2025年01月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安全错误
数据库的锁怎样保障安全
深圳瑞亿网络技术有限公司
云服务器怎么转移
市场周刊收录哪个数据库
金角网络技术有限公司
给用户赋数据库权限
电商软件开发哪家好
网络安全蓝鲸游戏
网吧web电影服务器
运营网络技术好处
csmar数据库下载基金数据
软件工程包括软件开发技术
中控考勤机数据库在c盘
驻场软件开发公司
揭阳软件开发培训
数据库快速开发平台
数据库采用技术有什么作用
上海触格网络技术有限公司
通讯行业软件开发
数据库管理系统是
网络安全服务行业研究报告
华为云服务器登录后操作方法
数据库切换功能测试
启明星辰天网络安全审计
爱立信数据网络技术有限公司
福建公司软件开发
山西亦师互联网科技有限公司
微擎小程序访问不了数据库
远程服务器桌面不显示
长春国内软件开发公司排行
高层次人才网络安全