java策略模式应用场景,java设计模式的作用
00-1010优缺点使用场景1、实现方式1、订单类型枚举类2、订单处理接口3、通用订单处理器4、秒杀订单处理器5、分组订单处理器6、订单管理器2、测试1、引入依赖2、测试用例总结
00-1010 1.算法可以自由切换。
2.避免使用多重条件判断。
3.良好的可扩展性。
00-1010 1.策略类的数量将会增加。
2.所有的策略类都需要向外界公开。
00-1010 1.如果一个系统中有许多类,而它们之间的区别只是它们的行为,那么使用策略模式可以动态地使一个对象在许多行为中选择一个行为。
2.系统需要动态地选择几种算法中的一种。
3.如果一个对象有许多行为,这些行为将不得不通过使用多个条件选择语句来实现,而没有合适的模式。
00-1010让我们假设一个场景。我们在一个电商系统里,订单有很多种,普通订单、秒杀订单、团单等等。当我们需要创建一个订单时,由于订单的类型不同,我们需要根据订单的类型执行不同的业务逻辑。
目录
包com . asur plus.common . strategy;进口龙目岛。AllArgsConstructor进口龙目岛。吸气剂;/* * *订单类型枚举类*/@ getter @ allargsconstructorpublicnenum订单类型枚举{common (1001,普通订单)、SECKILL(1002,秒杀订单)、SPELL(1003,分组订单);int类型;弦乐desc;}我们的订单分三种,普通订单,秒杀订单,群单。
优点
包com . asur plus.common . strategy;/* * *订单处理接口*/公共接口orderservice {/* * * create order * * @ return */void create order();/* * *获取订单类型* * @ return */OrderTypeEnum type();}
缺点
包com . asur plus.common . strategy;导入lombok . extern . SLF 4j . SLF 4j;导入org . spring framework . stereotype . service;/* * *普通订单处理器*/@ slf4j @ servicepublic类commonorderservice implements orderservice { @ override public void create order(){ log . info( create general order );} @ Override public OrderTypeEnum type(){ return OrderTypeEnum。常见;}}
使用场景
包com . asur plus.common . strategy;导入lombok . extern . SLF 4j . SLF 4j;导入org . spring framework . stereotype . service;/* * *秒杀订单处理器*/@ slf4j @ servicepublic类seckillerserviceimplements orderservice { @ override public void create order(){ log . info( create spike order );} @ Override public OrderTypeEnum type(){ return OrderTypeEnum。SECKILL}}
一、实现方式
包com . asur plus.common . strategy;导入lombok . extern . SLF 4j . SLF 4j;导入org . spring framework . stereotype . service;/* * *分组顺序处理器*/@ slf4j @ servicepublic类spellereservice implements orderservice { @ override public void Create Order(){ log . info( Create Grouping Order );} @ Override public OrderTypeEnum type(){ return OrderTypeEnum。拼;}}
1、订单类型枚举类
包com。asur plus。常见。策略;导入org。spring框架。豆子。工厂。注释。自动连线;导入org。spring框架。刻板印象。组件;导入Java。util。列表;导入Java。util。可选;/** * 订单管理器*/@组件公共类订单管理器{/* * *自动连线注解的强大之处*/@ auto wired private ListOrderService订单服务;/** * 创建订单* * @param类型订单类型* @ return */public void create order(int type){/* * *根据订单类型,找到对应的处理器*/optionaloorderservice any=订购服务。流().过滤器(f - f.type().getType()==type).findAny();/** * 没有对应的处理器*/if(!任何。是present()){抛出新的运行时异常(没有找到相应的订单实现);} //创建订单any.get().创建订单();}}这里就能体现出@自动连线的强大之处,可以一次性自动注入多个对象。根据订单类型,选出对应的处理器来处理该订单。
2、订单处理接口
3、普通订单处理器
!-测试依赖-依赖关系groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-test/artifact id/依赖项
4、秒杀订单处理器
包com。asur plus。常见。策略;导入org。朱尼特。测试;导入org。朱尼特。奔跑者。与.一起跑;导入org。spring框架。豆子。工厂。注释。自动连线;导入org。spring框架。靴子。测试。语境。弹簧靴测试;导入org。spring框架。测试。语境。JUnit 4。春跑者;/** * 策略模式*/@与(spring runner)一起跑。class)@ spring boot test公开课test main { @ auto wired private order manager order manager;@Test public void test() { //创建秒杀订单订单经理。创建订单(OrderTypeEnum .秒杀。gettype());} }输出结果
5、拼团订单处理器
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行信息技术的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。