我正在为一个潜在的游戏奠定基础,但我在设计要封装但高效的类时遇到了麻烦。
通常,人们说对象应该很少相互依赖以保持模块化和封装性。
但是,有时让某个对象相互了解似乎很方便。
假设我们有一个名为 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
。
另一种寻找主人的方法是简单地浏览所有主人,找到对应的狗。虽然这不会产生 and 的依赖Dog
,DogOwner
但这似乎比它需要的要昂贵得多,因为我们必须循环遍历所有所有者。
那么,Dog
有getOwner()
方法可以吗?如果不是,如果只知道 ,还有什么其他替代方法可以有效地访问所有者Dog
?