所以我们有商品,商品也有价格。 我想计算一下商品的价格。
第一个版本(切换):
int getPrice(String name){
switch(name){
case "Apple": return 20;
case "Banana": return 100;
...
}
}
第二版( map ):
Map<String, Integer> prices = new HashMap<String, Integer>;
int getPrice(String name){
return prices.get(name);
}
那么这个方法(或设计模式)是如何调用的呢?有什么特别的名字吗?
最佳答案
我想说这是 lookup table 的一个特例。我不会将其称为设计模式,因为它们更大、更抽象。这是一个实现细节。
例如,这可以在策略模式中使用:
static KnotStrategy getKnotStrategy(String name) {
switch(name.toLowerCase()) {
case "slip": return new SlipKnot();
case "granny": return new GrannyKnot();
case "bowline" return new BowlineKnot();
default: throw new IllegalArgumentException();
}
}
与查找相反:
static final Map<String, Supplier<KnotStrategy>> KNOTS = (
new HashMap<String, Supplier<KnotStrategy>>()
);
static {
KNOTS.put("slip", SlipKnot::new);
KNOTS.put("granny", GrannyKnot::new);
KNOTS.put("bowline", BowlineKnot::new);
}
static KnotStrategy getKnotStrategy(String name) {
Supplier<KnotStrategy> supp = KNOTS.get(name);
if(supp != null) {
return supp.get();
}
throw new IllegalArgumentException();
}
但这不是策略模式的一部分。
关于java - 这种设计模式怎么称呼呢? ( map 而不是开关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946188/