一、最笨重的
维护看起来很难受
public class Test {
private static String getPrice(String fruit) {
if ("梨".equals(fruit)) {
return "梨价格";
} else if ("苹果".equals(fruit)) {
return "苹果价格";
} else {
return "桃价格";
}
}
public static void main(String[] args) {
//System.out.println(TypeEnum.getPrice("梨"));
//System.out.println(FruitFactory.getType("梨").price());
System.out.println(getPrice("梨"));
}
}
二、枚举类判断
维护起来只需要添加修改枚举类,无需动其他的。
当枚举很多并且自定义方法很多时,性能会下降,且方法会很长,一拉一大串。二三十个枚举以下都可以用吧
public enum TypeEnum {
DEFEND("异常") {
@Override
public String price() {
return "我是异常的价格";
}
},
PEAR("梨") {
@Override
public String price() {
return "我是梨的价格";
}
},
APPLE("苹果") {
@Override
public String price() {
return "我是苹果的价格";
}
},
PEACH("桃") {
@Override
public String price() {
return "我是桃的价格";
}
};
TypeEnum(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public abstract String price();
public static String getPrice(String name) {
for (TypeEnum type : values()) {
if (type.getName().equals(name)) {
return type.price();
}
}
return DEFEND.price();
}
}
三、工厂类
扩展需要实现接口并添加到初始化工厂里。
public class FruitFactory {
private static Map<String, IFruit> fruitMap = new HashMap<>();
static {
fruitMap.put("梨", new Pear());
fruitMap.put("苹果", new Apple());
fruitMap.put("桃", new Peach());
}
public static IFruit getType(String fruit) {
return fruitMap.get(fruit);
}
}
这块只罗列苹果类
public class Apple implements IFruit {
@Override
public String price() {
return "我是苹果价格";
}
}