[英]Combining Enum Classes with Strategy Pattern for Modular Design
我是一位生物學家,他正在努力提高我過時的Java和OOP知識。 我正在通過編寫游戲來練習良好的軟件設計和模塊化(為什么要有趣嗎?)。
這個想法就像風險,但具有國際銀行業務。 每個銀行使用不同的貨幣; 每種貨幣使用不同的面額。 所有的銀行都提供相同的功能(余額,取款,存款,兌換),因此使用界面會很好。 也可以使用代表每種面額及其價值的枚舉來很好地描述一種貨幣。
這是我非常簡單的示例。 我可以為游戲中的每個縣創建新的Country()對象。
1)我是否被迫手動指定每個國家及其貨幣? 例如:
Country Canada = new Country(CANCurrency);
這似乎很笨拙,必須有更好的方法來做到這一點。
2)從使用County()的類中,如何直接訪問其(間接包含的)Enum值?
每個國家如下所示:
public class Country {
private final String name;
private ICurrency currency;
public Country(String name, ICurrency currency) {
this.name = name;
this.currency = currency;
}
// How do I access the specific Enum constants here?
}
這是我的銀行業務界面:
public interface IBank {
// Standard banking methods.
public void deposit(int amount);
public void withdraw(int amount);
public int balance();
public int exchange (Currency demandType, int demand, Currency offerType, int offer);
}
除面額外,每個國家/地區的貨幣都將具有相似的代碼。
public interface ICurrency {
public Currency getCurrency();
// Maybe some more helper methods here.
}
這是加拿大的貨幣:
public enum CANCurrency interface ICurrency {
LOONIE(1), TWONIE(2), FIVE(5); // etc....
}
和美國的貨幣:
public enum USACurrency interface ICurrency {
ONE(1), FIVE(5), TEN(10); // etc....
}
您可以使用枚舉,甚至單例枚舉來實現策略。 其實這是恕我直言的最好方法。 通常最好確保您的枚舉是不變的和無狀態的,但不是必須如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.