【笔记】SpringBoot项目下实践设计模式之工厂模式

18 篇文章 0 订阅
2 篇文章 0 订阅

示例结构(红框内的)

在这里插入图片描述

接口

com.springcloud.business.service.ICarService

package com.springcloud.business.service;

/**
 * @author xbronze
 */
public interface ICarService {
    public String run();
}

实现类

com.springcloud.business.service.impl.BusServiceImpl

package com.springcloud.business.service.impl;

import com.springcloud.business.service.ICarService;
import org.springframework.stereotype.Service;

/**
 * @author: xbronze
 * @date: 2023-04-23 14:50
 * @description: TODO
 */
@Service
public class BusServiceImpl implements ICarService {
    @Override
    public String run() {
        return "大巴车一般要求时速控制在每小时80公里";
    }
}

com.springcloud.business.service.impl.SuperCarServiceImpl

package com.springcloud.business.service.impl;

import com.springcloud.business.service.ICarService;
import org.springframework.stereotype.Service;

/**
 * @author: xbronze
 * @date: 2023-04-23 14:51
 * @description: TODO
 */
@Service
public class SuperCarServiceImpl implements ICarService {
    @Override
    public String run() {
        return "超跑的车速轻松能达到每小时200公里";
    }
}

一个工厂注册类

com.springcloud.business.service.impl.CarServiceContent

package com.springcloud.business.service.impl;

import com.springcloud.business.service.ICarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * @author: xbronze
 * @date: 2023-04-23 15:07
 * @description: TODO
 */
@Service
public class CarServiceContent {

    @Autowired
    private Map<String, ICarService> carServiceMap;

    public ICarService getCarService(String type) {
        if (carServiceMap.isEmpty()) {
            return null;
        }
        return this.carServiceMap.get(type);
    }
}

项目启动,系统会把ICarService的实现类都注入到carServiceMap,key值为实现类上@Service注解定义的value,如果没有显式的设置value,如示例上所示,那么默认value值为类名(首字母小写)。

Controller类VehicleController


/**
 * @author: xbronze
 * @date: 2023-04-23 14:54
 * @description: TODO
 */
@RestController
@RequestMapping("/vehicle")
public class VehicleController {

    @Autowired
    private IVehicleService vehicleService;

    @GetMapping("/{type}")
    public String vehicle(@PathVariable("type") String type){
        return vehicleService.choose(type);
    }
}

接口IVehicleService

package com.springcloud.business.service;

/**
 * @author: xbronze
 * @date: 2023-04-23 14:54
 * @description: TODO
 */
public interface IVehicleService {

    String choose(String type);
}

实现类VehicleServiceImpl

package com.springcloud.business.service.impl;

import com.springcloud.business.service.ICarService;
import com.springcloud.business.service.IVehicleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author: xbronze
 * @date: 2023-04-23 15:17
 * @description: TODO
 */
@Service
public class VehicleServiceImpl implements IVehicleService {

    @Autowired
    private CarServiceContent carServiceContent;

    @Override
    public String choose(String type) {
        ICarService carService = carServiceContent.getCarService(type);
        return carService.run();
    }
}

测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


完毕

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值