文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java策略模式实例分析

2023-06-29 08:15

关注

这篇文章主要讲解了“Java策略模式实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java策略模式实例分析”吧!

优点

算法可以自由切换。

避免使用多重条件判断。

扩展性良好。

缺点

策略类会增多。

所有策略类都需要对外暴露。

使用场景

如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

一个系统需要动态地在几种算法中选择一种。

如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

一、实现方式

假设一个场景,我们在电商系统中,订单分为很多种,例如:普通订单,秒杀订单,拼团订单等等。我们需要创建一个订单的时候,由于订单的类型不同,我们需要根据订单的类型执行不同的业务逻辑。

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 {        void createOrder();        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    private List<OrderService> orderServices;        public void createOrder(int type) {                Optional<OrderService> any = orderServices.stream().filter(f -> f.type().getType() == type).findAny();                if (!any.isPresent()) {            throw new RuntimeException("没有找到相应的订单实现");        }        // 创建订单        any.get().createOrder();    }}

这里就能体现出 @Autowired 的强大之处,可以一次性自动注入多个对象。根据订单类型,选出对应的处理器来处理该订单。

二、测试

1、引入依赖

<!-- 测试依赖 --><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-test</artifactId></dependency>

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策略模式实例分析”的内容了,经过本文的学习后,相信大家对Java策略模式实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯