SpringBoot 之简单工厂模式

SpringBoot 之简单工厂模式

简单工厂: 工厂类根据传入的参数类型,动态决定创建哪一个产品了(实现类都继承同一个父类或接口)。在Spring中,我们只要将要用到的支付方式注入到容器中,我们便可以根据bean到名字去容器中获取。

首先创建一个父类或者接口。
public interface Animal {
    void say();
}
创建多个产品类去实现同一个父类或接口
@Service
public class Dog implements Animal 
{
    @Override
    public void say() {
        System.out.println("DogDogDog");
    }
}

@Service
public class Cat implements Animal 
{
    @Override
    public void say() {
        System.out.println("CatCatCat");
    }
}

@Service
public class Pig implements Animal 
{
    @Override
    public void say() {
        System.out.println("PigPigPig");
    }
}
方法一:在spring中共通过beanName去获取对应的实体
@SpringBootApplication
public class SpringBootSimpleFactoryApplication {

    public static void main(String[] args) {

        ConfigurableApplicationContext context = SpringApplication.run(SpringBootSimpleFactoryApplication.class, args);
        //这里由于@Service注解默认会将类首字母小写注册到spring容器
        Animal animal = (Animal) context.getBean("dog");
        animal.say();
    }
}
方法二:创建一个工厂,根据传入的信息,返回相应的实体
@Service
public class AnimalFactory {

    @Autowired
    private Dog dog;
    @Autowired
    private Cat cat;
    @Autowired
    private Pig pig;

    public AmialMethod say(String type){
        switch (type){
            case "dog":
                return dog;
            case "cat":
                return cat;
            case "pig":
                return pig;
            default:
                System.out.println("传入的参数没有对应的实体类");
        }
        return null;
    }
    
}
@RestController
public class AnimalController {

    @Autowired
    private AnimalFactory animalFactory;

    @RequestMapping("say")
    public void pay(String type){
        try {
            Animal animal = animalFactory.say(type);
            animal.say();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值