gpt4 book ai didi

java - 将枚举类与策略模式相结合进行模块化设计

转载 作者:行者123 更新时间:2023-12-01 14:20:22 28 4
gpt4 key购买 nike

我是一名生物学家,正在努力提高我过时的 Java 和 OOP 知识。我正在通过编写游戏来练习良好的软件设计和模块化(为什么要制作有趣的东西?)。

这个想法就像风险一样,但涉及国际银行业务。每家银行处理不同的货币;每种货币使用不同的面额。银行都提供相同的功能(余额、取款、存款、兑换),因此有一个界面会做得很好。还可以使用代表每种面额及其值(value)的枚举来很好地描述货币。

这是我非常简单的例子。我可以为游戏中的每个县创建新的 Country() 对象。

1) 我是否被迫手动指定每个国家及其各自的货币?例如:

Country Canada = new Country(CANCurrency);

这看起来相当笨拙,必须有更好的方法来做到这一点。

2) 从使用 County() 的类中,如何直接访问其(间接包含的)枚举值?

每个国家都是这样的:

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....
}

最佳答案

您可以使用枚举,甚至单例枚举来实现策略。事实上,恕我直言,这是最好的方法。通常最好确保您的枚举是不可变的和无状态的,但这不是必需的。

关于java - 将枚举类与策略模式相结合进行模块化设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17643444/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com