栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用@Autworied实现工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用@Autworied实现工厂模式

首先一个大前提,这些“商品”都有统一的标准和行为(因为不知道具体要的哪个实现类,所以要有个抽象类或者接口,因此需要统一的标准和行为)。
所以首先设计抽象类或者接口

public abstract class Animal {
    private String name ="animals";
    //getName()和say()可以写成抽象的,但是这么写可以保证即使拿不到对应的产品,也有默认的方法实现。
    public void say(){
        System.out.println(name);
    }

    public String getName() {
        return name;
    }
}

对应的Bean

//这里使用@Component是要配合@Autowried实现,所以要先注入到Spring容器中。
@Component
public class Cat extends Animal{
	//赋初值Cat
    @Value("Cat")
    private String name;
    //替换掉父类中getName()方法
    public String getName() {
        return name;
    }
}
//同上
@Component
public class People extends Animal{
    @Value("People")
    private String name;
    public String getName() {
        return name;
    }

}

工厂实现

@Service
public class DeptServiceImpl {
    @Autowired
    DeptMapper deptMapper;
    @Autowired
    public void init(List animals){
        for(Animal animal:animals){
            System.out.println(animal.getName());
        }
    }
   
}
@Service
public class DeptServiceImpl{
    @Autowired
    DeptMapper deptMapper;
    //存储对应的Bean
    public HashMap beans = new HashMap<>();
    //Spring会将所有实现Animal的Bean都注入到List里面来,然后通过beans 去接收,这里使用static是可以在别的地方也使用。
    @Autowired
    public void init(List animals){
        for(Animal animal:animals){
            beans.put(animal.getName(),animal);
        }
    }
   
}

最后获取对应的Animals

@RestController
public class AnimalController {
    @Autowired
    DeptService deptService;
    @GetMapping("/{name}")
    public Animal getCat(@PathVariable("name") String name){
        return new JsonObject(deptService.getAnimal(name), CodeAndMsgEnum.success.getCodeAndMsg());
    }
}

最后看下效果


可以看到已经实现了工厂模式了,在该场景中,其实通过获取到不同的bean,也能通过say()方法执行对应的方法。所以这种工厂模式,其实也可以用来编写统一的Service层入口,然后再通过该入口执行对应的不同Service实现。 也可以用来实现一小部分统一的Service层的实现,总之根据业务需要,灵活使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号