SpringBoot整合抽象工厂

什么是抽象工厂

先说一下简单工厂,简单工厂是一个工厂类创建多个实例,工厂方法是一个抽象工厂有多个实例工厂,每个实例工厂创建一个类的实例,而抽象工厂是一个抽象工厂有多个子类实例工厂,每个实例工厂创建一组实例,什么叫一组实例,这个和简单工厂有区别,简单工厂是针对同一类型的,比如说发消息,短信发送,boss发送一类的,而抽象工厂是要生成一组,比如是家具制造商,要生成出沙发、饭桌、板凳、椅子,抽象工厂就是生成出这一组家具出来。抽象工厂有两个概念产品等级结构与产品族,产品等级是什么,抽象一个电视机,它的子类就是海尔电视剧、格力电视剧,这就是产品等级,都是电视剧只不过品牌不同,产品族是什么,比如一个生产电器的工厂,不能让他只生产电器,还可以生产电冰箱、电脑、电空调,很多个种类,这就是产品族。

产品等级结构与产品族示意图如图3所示:

在这里插入图片描述

在图3中,不同颜色的多个正方形、圆形和椭圆形分别构成了三个不同的产品等级结构,而相同颜色的正方形、圆形和椭圆形构成了一个产品族。

我有一个需求,需要查询基础层、中间层、指标层的数据,需要查询两个,一个是名称,一个是数据,三个层级的名称和数据就是产品等级,每个层级都要查询名称和数据就是产品族

四个角色
抽象产品:一般定义接口或者抽象类,提供给具体产品
具体产品:抽象产品的子类,写具体代码逻辑
抽象工厂:一般定义接口或者抽象类,提供给具体工厂
具体工厂:抽象工厂的子类,调用具体产品的方法

抽象产品

public interface EvdDataOptionService {

    //查询数据选项
    public List<String> getDataOptionList();
}

public interface EvdDataService {

    //查询层级名称
    public String getHierarchyName();
}

具体产品

/**
 * 查询基础层名称
 */
@Service
public class EvdBaseLayerServiceImpl implements EvdDataService {
    @Override
    public String getHierarchyName() {
        return "基础层名称";
    }
}

/**
 * 查询指标层名称
 */
@Service
public class IndexLevelServiceImpl implements EvdDataService {
    @Override
    public String getHierarchyName() {
        return "指标层名称";
    }
}

/**
 * 查询中间层名称
 */
@Service
public class InterlayerServiceImpl implements EvdDataService {
    @Override
    public String getHierarchyName() {
        return "中间层名称";
    }
}

/**
 * 指标层数据选项
 */
@Service
public class LayerDataOptionsServiceImpl implements EvdDataOptionService {
    @Override
    public List<String> getDataOptionList() {
        return Arrays.asList("指标层数据选项");
    }
}

/**
 * 中间层数据选项
 */
@Service
public class MidtierDataOptionsServiceImpl implements EvdDataOptionService {
    @Override
    public List<String> getDataOptionList() {
        return Arrays.asList("中间层数据选项");
    }
}
/**
 * 基础数据选项
 */
@Service
public class UnderlyingDataOptionServiceImpl implements EvdDataOptionService {
    @Override
    public List<String> getDataOptionList() {
        return Arrays.asList("基础数据选项");
    }
}

抽象工厂

/**
 * 抽象工厂
 */
public interface EvdFactory {

    //查询层级名称
    public String getFactotyHierarchyName();

    //查询数据选项
    public List<String> getFactotyDataOptionList();
}

具体工厂

/**
 * 基础层工厂
 */
@Service
public class BaseLayerFactory implements EvdFactory{

    @Autowired
    private EvdBaseLayerServiceImpl evdBaseLayerService;
    @Autowired
    private UnderlyingDataOptionServiceImpl underlyingDataOptionService;
    @Override
    public String getFactotyHierarchyName() {
        return evdBaseLayerService.getHierarchyName();
    }

    @Override
    public List<String> getFactotyDataOptionList() {
        return underlyingDataOptionService.getDataOptionList();
    }
}

/**
 * 指标层工厂
 */
@Service
public class IndexLevelFactory implements EvdFactory{

    @Autowired
    private IndexLevelServiceImpl indexLevelService;

    @Autowired
    private LayerDataOptionsServiceImpl layerDataOptionsService;
    @Override
    public String getFactotyHierarchyName() {
        return indexLevelService.getHierarchyName();
    }

    @Override
    public List<String> getFactotyDataOptionList() {
        return layerDataOptionsService.getDataOptionList();
    }
}

/**
 * 中间层工厂
 */
@Service
public class InterlayerFactory implements EvdFactory{

    @Autowired
    private MidtierDataOptionsServiceImpl midtierDataOptionsService;
    @Autowired
    private InterlayerServiceImpl interlayerService;

    @Override
    public String getFactotyHierarchyName() {
        return interlayerService.getHierarchyName();
    }

    @Override
    public List<String> getFactotyDataOptionList() {
        return midtierDataOptionsService.getDataOptionList();
    }
}

controller调用
http://localhost:8080/evdData?type=1
http://localhost:8080/evdData?type=2
http://localhost:8080/evdData?type=3

@RestController
public class EvdDataController {

    @Autowired
    private BaseLayerFactory baseLayerFactory;
    @Autowired
    private InterlayerFactory interlayerFactory;
    @Autowired
    private IndexLevelFactory indexLevelFactory;

    @GetMapping("/evdData")
    public void evdData(Integer type){
        if(type == 1){
            System.out.println(baseLayerFactory.getFactotyHierarchyName());
            System.out.println(baseLayerFactory.getFactotyDataOptionList());
        }else if(type == 2){
            System.out.println(interlayerFactory.getFactotyDataOptionList());
            System.out.println(interlayerFactory.getFactotyHierarchyName());
        }else if(type == 3){
            System.out.println(indexLevelFactory.getFactotyDataOptionList());
            System.out.println(indexLevelFactory.getFactotyHierarchyName());
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值