設計上の決定を下す必要があるケースに遭遇しました (プログラム自体についてではなく、その状況で他の人が何をしているのかを知るために、これを API であるかのように見るのが最善です) )。私は列挙型クラスを持っています:
public enum Type
{
CAPTAIN(2), // Only Use CalcMorale never other
LEADER(5), // Only use CalcMorale never other
PARTIER(80); // Only use CalcMorale2 never other
int calcMorale(int inMorale)
{
return inMorale * (100 + morale) / 100;
}
int calcMorale2(int inMorale, int teamCount)
{
return inMorale + morale * teamCount;
}
int morale;
private Type(int aMor)
{
morale = aMor;
}
}
これらの列挙型の 1 つを保持し、パラメーターを渡すクラスでもある Character があります。
コメントされている問題は、特定の列挙型のみが列挙型クラス内で特定のメソッドを使用するようにしたいということです。リーダーはチームの士気に 5% を追加しますが、パーティーはそのパーティー内のメンバーごとに 80 を追加するため、別のパラメーターが必要になります。いくつかの方法で問題を解決できますが、コミュニティがどのように対処するかについての一般的なコンセンサスを知りたいです。
私はできた:
適切なメソッドを呼び出すのはプログラマーの責任にしてください。(これは私には間違っているように聞こえます)。
各列挙型に独自のバージョンの関数を与えます。(これは巨大なファイルを作成し、大量のコードを繰り返すことになります)。
これを処理するスイッチを持つメソッドを持つ 'Character' クラスに責任を残します。(これは、プログラマが意図せずに計算を変更できることを意味します)。ただし、後で代わりに列挙型をファイルに移動したい場合は、これにより問題が少なくなります。ただし、これが列挙型の責任のみである場合、これがカプセル化を破るかどうかは疑問です。
Type をクラスにし、匿名の内部クラスを介してメソッドを定義します。この場合、enum クラスに getByName() があるのではなく、クラスがマップに追加されます。
--
何が最も適切だと思いますか? (APIを使用しているかのように、クラスが可能な限り自己依存的であることを好みます(そうはなりません)。列挙型の量に応じて、あなたの提案はどのように/影響を受けますか?そして、私が望んでいたケースはどうですか?両方のメソッドを使用できる列挙型? 言語は Java です。