潜在的なゲームの基礎をレイアウトしていますが、カプセル化された効率的なクラスを設計するのに苦労しています。
一般に、モジュール性とカプセル化を維持するために、オブジェクトは相互にほとんど依存するべきではないと人々は言います。
ただし、あるオブジェクトがお互いを認識していることが便利な場合もあります。
Dogというクラスがあるとしましょう。
public class Dog {
public void eat() { ... }
public void wagTail() { ... }
}
犬には飼い主がいるので、犬の飼い主クラスがあります。
public class DogOwner {
private Dog dog;
public Dog getDog() { return dog; }
public void petDog() { ... }
public void takeDogForWalk() { ... }
}
Dog
では、 があり、その所有者がいない場合はどうなるでしょうか。getOwner()
のメソッドを作るのは理にかなっているようですDog
。
public class Dog {
private DogOwner owner;
public void eat() { ... }
public void wagTail() { ... }
public DogOwner getOwner() { return owner; }
}
ただし、これはDog
に関する情報を提供DogOwner
するようになりました。これは、情報隠蔽に違反しているようです。、およびがあるDog
ため、冗長性も作成されているようです。 DogOwner
DogOwner
Dog
飼い主を見つけるもう 1 つの方法は、単純にすべての飼い主を調べて、対応する犬を見つけることです。Dog
これはとの依存関係を作成しませんがDogOwner
、すべての所有者を循環する必要があるため、必要以上にコストがかかるようです。
では、方法Dog
があってもgetOwner()
よろしいでしょうか。Dog
そうでない場合、所有者のみがわかっている場合に所有者に効率的にアクセスするために、他にどのような選択肢がありますか?