This comes up in interviews with intermediate programmers (and some seniors), the "enum factory" in Java:
public final class Money {
// Infrequent that new currencies created,
// old currencies never vanish, just fade away
public enum Currency {
USD, PHP; // And many more
// Additional fields as needed, e.g., locale
public Money print(final BigDecimal amount) {
return new Money(this, amount);
}
}
private final Currency currency;
private final BigDecimal amount;
private Money(final Currency currency, final BigDecimal amount) {
this.currency = currency;
this.amount = amount;
}
// Appropriate methods
} And elsewhere with static imports:
Money pocket = asList(USD.print(ONE), PHP.print(TEN));
The key observations:
- Amounts of money are intimately attached to a particular currency
- Currency has few qualities not attached to money
- Ok to add more currencies through code
- Code reads better with factory than without
No comments:
Post a Comment