java设计模式之动物园联欢大会
最近陪孩子读绘本,看到各种各样的小动物,其中印象最深的当属一篇,动物园召开联欢大会的故事。主要剧情就是动物园召开联欢大会,很多小动物应邀前往,主办方为了招待这些小动物,根据食草性和食肉性进行划分,就这么一个小需求。作为程序员的老爸,不会放过任何一个发挥联想的机会,废话不说准备开干。首先就是开发各式各样小动物的枚举值。/*** 动物枚举值*/public enum animalEnum {ANIMA
·
最近陪孩子读绘本,看到各种各样的小动物,其中印象最深的当属一篇,动物园召开联欢大会的故事。主要剧情就是动物园召开联欢大会,很多小动物应邀前往,主办方为了招待这些小动物,根据食草性和食肉性进行划分,就这么一个小需求。
作为程序员的老爸,不会放过任何一个发挥联想的机会,废话不说
准备开干。
首先就是开发各式各样小动物的枚举值。
/**
* 动物枚举值
*/
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 "";
}
这样就可以通过自定义的动物枚举,实现整个动物参加运动会的流程,并且后期增加小动物的情况下,不用修改之前的代码。
更多推荐
已为社区贡献1条内容
所有评论(0)