SpringBoot之工厂方法模式

工厂方法简介:

我们先来说一下简单工厂,简单工厂是一个工厂类创建多个实例对象,比如我们新增一个实例对象,工厂类就需要改变源代码,这违背了开闭原则。抽象工厂就是用来解决
这个问题的,我们用多个工厂创建不同的实例,怎么理解呢,就好比我要发送信息,发送kafka、企业微信的信息,我们就用两个工厂类来创建kafka和企业微信的对象,
这样就是不同的工厂类创建不同的实例对象,我要扩展的时候不会修改源代码了。

工厂方法模式的使用

工厂方法分为这几个角色:抽象产品、具体产品、抽象工厂、具体工厂,理清楚这几个角色,我会结合实例代码来讲解
抽象产品TaskInformationService:定义产品的接口,这个接口具体实例的公共父类
具体产品:也就是具体实现逻辑的子类,需要实现抽象产品的接口或者抽象类
抽象工厂:是所有子类工厂类的父类,抽象工厂可以是接口或者实现类
具体工厂:就是实例的工厂类,每个工厂创建不同的实例

业务场景:我这里有一个主体,要查询主体报告数量,主体类型不同,分为一级主体二级主体,依次到十多级主体,报告都需要查不同的数据库表,以及计算报告数量的方式不同

定义抽象产品

    //查询主体数量
    public void getEntityNum();

定义具体产品

@Service
public class FirstServiceImpl implements EntityService {
    @Override
    public void getEntityNum() {
        System.out.println("查询一级主体数量");
    }
}

@Service
public class SecondServiceImpl implements EntityService {
    @Override
    public void getEntityNum() {
        System.out.println("查询二级主体数量");
    }
}

抽象工厂

public interface EntityFactory {

    //查询主体报告数量
    public void getEntityReportNum();
}

具体工厂

/**
 * 一等主体工厂
 */
@Service("firstEntityFactory")
public class FirstEntityFactory implements  EntityFactory{

    @Autowired
    private FirstServiceImpl firstService;
    @Override
    public void getEntityReportNum() {
        firstService.getEntityNum();
    }
}

/**
 * 二等主体工厂
 */
@Service("secondFactory")
public class SecondFactory implements EntityFactory{

    @Autowired
    private SecondServiceImpl secondService;
    @Override
    public void getEntityReportNum() {
        secondService.getEntityNum();
    }
}

controller测试
http://localhost:8080/entity?type=1
http://localhost:8080/entity?type=2

@RestController
public class EntityController {

    @Autowired
    private FirstEntityFactory firstEntityFactory;
    @Autowired
    private SecondFactory secondFactory;

    @GetMapping("/entity")
    public void entity(Integer type){
        if (type == 1){
            firstEntityFactory.getEntityReportNum();
        }else if(type == 2){
            secondFactory.getEntityReportNum();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值