zoukankan      html  css  js  c++  java
  • [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;
        }
    
    }
  • 相关阅读:
    cdoj1325卿学姐与基本法
    HUAS 1476 不等数列(DP)
    BZOJ 1818 内部白点(离散化+树状数组)
    BZOJ 1816 扑克牌(二分)
    BZOJ 1801 中国象棋(DP)
    BZOJ 1791 岛屿(环套树+单调队列DP)
    BZOJ 1797 最小割(最小割割边唯一性判定)
    BZOJ 1789 Y形项链(思维)
    BZOJ 1787 紧急集合(LCA)
    BZOJ 1786 配对(DP)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13959827.html
Copyright © 2011-2022 走看看