这一切都取决于什么Qualities
是什么,他们做什么。如果该列表是相当稳定的,enum
小号可以一个很好的解决方案:
enum Quality {
MERCHANT,
STOCKBROKER,
...
}
好事约enum
s是他们基本上是类,因此可以实现接口,并有状态和行为。他们还配备了有用的辅助类:
Set<Quality> = EnumSet.of(MERCHANT, STOCKBROKER);
,然后你可以使用所有的功能Set
像等
但我不能告诉你,如果这是你的一个合适的解决方案,而不了解更多信息。
编辑:许多语言的共同起点是枚举。在C/C++/C#中,这将会像这样:
if (merchantType == STOCKBROKER) { ... }
下面是Java的枚举更好的方式。比方说,你定义为股票型另一个枚举:
enum StockType {
LISTED_EQUITIES,
MANAGED_FUNDS
}
如果你有这样的假设给定的商家类型卖一个类型的东西:
enum MerchantType {
STOCKBROKER(StockType.LISTED_EQUITIES),
FINANCIAL_ADVISER(StockType.MANAGED_FUNDS);
private final StockType stockType;
MerchantType(StockType stockType) {
this.stockType = stockType;
}
public StockType getStockType() {
return stockType;
}
}
所以不要说:
StockType stockType;
if (merchantType == MerchantType.STOCKBROKER) {
stockType = StockType.EQUITIES;
}
...
你说:
StockType stockType = merchantType.getStockType();
Java枚举具有状态和行为。这是一个非常强大的概念。
但你可以做得比这更好。相反,假设每一个商人的股票,这是更好地处理行为:
enum MerchantType {
STOCKBROKER,
FINANCIAL_ADVISER;
private static final Map<MerchantType, Set<StockType>> STOCK_TYPES;
static {
STOCK_TYPES = new EnumSet<MerchantType, Set<StockType>>(MerchantType.class);
STOCK_TYPES.put(STOCKBROKER, EnumSet.of(StockType.LISTED_EQUITIES));
STOCK_TYPES.put(FINANCIAL_ADVISER,
EnumSet.of(StockType.LISTED_EQUITIES, StockType.MANAGED_FUNDS));
}
public boolean canSell(StockType stockType) {
Set<StockType> stockTypes = STOCK_TYPES.get(this);
return stockTypes != null && stockTypes.contains(stockType);
}
}
此时你的代码变成:
if (merchantType.canSell(StockType.LISTED_EQUITIES)) {
...
}
这是一个更为自然,可读和可扩展的解决方案。
做这些特质呢?他们如何使用? – cletus 2010-04-17 03:43:58
@Cletus,谢谢你的回答。除此之外,品质用于确定商家可以访问的股票,并影响商家的买入和卖出。例如,股票经纪商有股票代码,金融服务商有金融服务产品,如股票住房贷款。 – Arvanem 2010-04-17 03:48:23