【发布时间】:2021-05-14 13:05:56
【问题描述】:
我正在学习Java,想了解如何实现这种产品工厂的想法? (或其他方式的代码结构)
public interface VirtualBD <E extends Enum<E>> {
void addInStorage(Class<E> type, Product product, int amount);
}
1问:如何使用泛型获取任意类型的Enum类作为参数
根类别
public abstract class Product {
...
}
public enum AlchogolType {
Beer, Vodka;
}
public enum nonAlchogolType {
FreshJuise, Lemonade;
}
子类别
public abstract class Alchogol extends Product {
...
}
public abstract class nonAlchogol extends Product {
...
}
public class Beer extends Alchogol {
...
}
还有,这里有一个问题:
public class AlchogolTables implements VirtualBD{
HashMap<Alchogol, Integer> beer = new HashMap<Alchogol, Integer>();
HashMap<Alchogol, Integer> vodka = new HashMap<Alchogol, Integer>();
@Override
public void addInStorage(AlchogolType type, Product product, int amount) {
switch (type) {
case Beer:
beer.put((Alchogol) product,amount);
break;
case Vodka:
vodka.put((Alchogol) product,amount);
break;
default:
break;
}
}
}
在我的想法中 - 我想对不同的产品使用 addInStorage 方法,例如:
public class OtherBeveragesTables implements VirtualBD{
HashMap<nonAlchogol, Integer> orangeFresh = new HashMap<nonAlchogol, Integer>();
HashMap<nonAlchogol, Integer> soda = new HashMap<nonAlchogol, Integer>();
@Override
public void addInStorage(nonAlchogolType type, Product product, int amount) {
switch (type) {
case FreshJuise:
orangeFresh.put((nonAlchogol) product,amount);
break;
case Lemonade:
soda.put((nonAlchogol) product,amount);
break;
default:
break;
}
}
}
- 如何使用 Enum AlchogolType/nonAlchogolType 作为参数?
- 我怀疑代码组织的正确性是否适合这样的任务:为许多具有类别、一些差异和相似之处的产品编写工厂。
- 是 CAST:beer.put((Alchogol) product,amount); 正常方式吗?
【问题讨论】:
标签: java generics enums factory