簡體   English   中英

結合枚舉類與策略模式進行模塊化設計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM