[Spring] Factory Pattern

Coding again the interface.

 

interface:

复制代码
package com.frankmoley.lil.designpatternsapp.factory;

public interface Pet {
    void setName(String name);
    String getName();
    String getType();
    boolean isHungry();
    void feed();
}
复制代码

 

Factory:

复制代码
package com.frankmoley.lil.designpatternsapp.factory;

import org.springframework.stereotype.Component;

@Component
public class PetFactory {
    public Pet createPet(String animalType){
        switch(animalType.toLowerCase()){
            case "dog":
                return new Dog();
            case "cat":
                return new Cat();
            default:
                throw new UnsupportedOperationException("unknown animal type");
        }
    }
}
复制代码

@Component added to tell this class should be managed by Spring, so later we can use @Autowired.

 

Class implements the interface:

复制代码
package com.frankmoley.lil.designpatternsapp.factory;

public class Cat implements Pet {
    private String name;
    private boolean hungry;

    public Cat(){
        super();
        this.hungry = true;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public String getType() {
        return "CAT";
    }

    @Override
    public boolean isHungry() {
        return this.hungry;
    }

    @Override
    public void feed() {
        this.hungry = false;
    }
}
复制代码

 

Controller:

复制代码
@RestController
@RequestMapping("/")
public class AppController {
    @Autowired
    private PetFactory petFactory;

    @GetMapping
    public String getDefault(){
        return "{\"message\": \"Hello World\"}";
    }

    @PostMapping("adoptPet/{type}/{name}")
    public Pet adoptPet(@PathVariable String type, @PathVariable String name){
        Pet pet = this.petFactory.createPet(type);
        pet.setName(name);
        pet.feed();
        return pet;
    }

}
复制代码

 

posted @   Zhentiw  阅读(123)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-11-11 [ES6] Extends class in ES6 vs ES5 subclass
2016-11-11 [Node.js] Testing ES6 Promises in Node.js using Mocha and Chai
2016-11-11 [Angular2] @Ngrx/store and @Ngrx/effects learning note
2015-11-11 [Javascript] Intro to the Web Audio API
2014-11-11 [Firebase] 4. Firebase Object related Database
2014-11-11 [Firebase] 3. Firebase Simple Login Form
点击右上角即可分享
微信分享提示