[纯干货] 如何用Spring 原生注解 快速实现策略模式+工厂模式

前言

这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来,单独做一个微服务,实现企业交互逻辑的关注点分离。

在这里面我很自然而然的就用到了策略模式 + 工厂模式的方式,包装内部实现细节,向外提供统一的调用方式,有效的减少if/else的业务代码,使得代码更容易维护,扩展。

之前看过一些文章,是使用自定义注解+自动BeanProcessor的方式来实现,个人感觉有点麻烦。因为Spring原生就提供类似的特性。

本篇旨在介绍在实际的业务场景,如何借助Spring IoC 依赖注入的特性,使用Spring 原生注解 来快速实现 策略模式 + 工厂模式。希望能够对你有启发。

业务场景

从原项目抽离出来的企业服务,承担的是与外部企业交互的职责。不同企业,虽然会产生的交互行为是相同的,但是交互行为内部的实现逻辑各有不同,比如发送报文接口,不同企业可能报文格式会不同。

针对这种不同企业交互细节不同的场景,将与企业的交互行为抽象出来EntStrategy接口,根据服务消费者传入的企业号选择对应的实现类(策略类),逻辑简化之后如下图。

spring_ent_demo.png

快速实现

现在让我们用快速用一个DEMO实现上述场景。

我们的期望目标是,根据不同的企业编号,我们能够快速找到对应的策略实现类去执行发送报文的操作。

Step 1 实现策略类

假设我们现在对外提供的服务Api是这样的,

/**
 * @param entNum 企业编号
 */
public void send(String entNum) {
   
	// 根据不同的企业编号,我们能够快速找到对应的策略实现类去执行发送报文的操作
}

现在我们先定义个EntStrategy接口

/**
 * @author Richard_yyf
 * @version 1.0 2019/10/23
 */
public interface EntStrategy {
   

    String getStuff();

    void send();
}

三个策略类

DefaultStrategy

@Component
public class DefaultStrategy  implements EntStrategy {
   
    @Override
    public String getStuff() {
   
        return "其他企业";
    }

    @Override
    public void send() {
   
        System.out.println("发送默认标准的报文给对应企业");
    }

    @Override
    public String toString() {
   
        return getStuff();
    }
}

EntAStrategy

@Component
public class EntAStrategy implements EntStrategy {
   
    @Override
    public String getStuff() {
   
        return "企业A";
    }

    @Override
    public void send() {
   
        System.out.println("发送A标准的报文给对应企业");
    }

    @Override
    public String toString(
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值