java设计模式之动物园联欢大会

最近陪孩子读绘本,看到各种各样的小动物,其中印象最深的当属一篇,动物园召开联欢大会的故事。主要剧情就是动物园召开联欢大会,很多小动物应邀前往,主办方为了招待这些小动物,根据食草性和食肉性进行划分,就这么一个小需求。
作为程序员的老爸,不会放过任何一个发挥联想的机会,废话不说
准备开干。
首先就是开发各式各样小动物的枚举值。

/**
 * 动物枚举值
 */
public enum animalEnum {

    ANIMAL_DOG("dog", "小狗"),
    ANIMAL_CHICKEN("chicken", "小鸡"),
    ANIMAL_PIG("pig", "小猪"),
    ANIMAL_SHEEP("sheep", "小羊"),
    ANIMAL_CATTLE("cattle", "小牛"),
    ANIMAL_HORSE("horse", "小马"),
    ANIMAL_LION("lion", "狮子"),
    ANIMAL_TIGER("tiger", "老虎"),
    ANIMAL_ELEPHANT("elephant", "大象");

    private String code;

    private String msg;

    animalEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

}

然后就是小动物进场,将需求的痛点(吃什么的问题)设计成接口类,让不同的小动物去分别实现接口,也就是去描述每种动物喜欢吃什么,是吃草还是吃肉的。
跟现实开发一样,基本上都是将需求中的共性动作,抽出为接口类,然后用不同的实现类去实现接口方法,这种操作在现实的开发中使用的也是比较多的。

public interface EatService {

    void eatAction(String animalType);
}

最后就是工厂类的设计,根据不同的动物的枚举类型,转换为对应的接口实现类型。

public class eatFactory {

    public static EatService getEatService(String animalType){
        if (animalType.equals(animalEnum.ANIMAL_DOG.getCode())) {
            return SpringContextUtils.getBean(AnimalDogServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_CHICKEN.getCode())) {
            return SpringContextUtils.getBean(AnimalChickenServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_PIG.getCode())) {
            return SpringContextUtils.getBean(AnimalPigServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_SHEEP.getCode())) {
            return SpringContextUtils.getBean(AnimalSheepServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_CATTLE.getCode())) {
            return SpringContextUtils.getBean(AnimalCattleServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_HORSE.getCode())) {
            return SpringContextUtils.getBean(AnimalHorseServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_LION.getCode())) {
            return SpringContextUtils.getBean(AnimalLionServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_TIGER.getCode())) {
            return SpringContextUtils.getBean(AnimalTigerServiceImpl.class);
        }if (animalType.equals(animalEnum.ANIMAL_ELEPHANT.getCode())) {
            return SpringContextUtils.getBean(AnimalElephantServiceImpl.class);
        }else {
            return null;
        }
    }
}

拿小牛作为实现的例子

@Service
public class AnimalCattleServiceImpl implements EatService {

    @Override
    public void eatAction(String animalType) {
        System.out.print("小牛进场吃草!");
    }
}

控制器层代码

@GetMapping({"/factory"})
    public String factory(String animalType) {
        for(animalEnum e: animalEnum.values()){
            System.out.println(e.getMsg()+"|开始进场");
            EatService eatService = eatFactory.getEatService(e.getCode());
            eatService.eatAction(e.getCode());
        }
        return "";
    }

这样就可以通过自定义的动物枚举,实现整个动物参加运动会的流程,并且后期增加小动物的情况下,不用修改之前的代码。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值