每当我遇到 atomic 方法应该访问不同类的私有部分的情况时,OOP基本上不可能正确地实现这样的事情让我感到沮丧。
考虑一个简单的例子:某种类型的集合应该跟踪其成员,成员应该跟踪它们的所有者(例如,游戏中生物和位置之间的关系)。我没有看到实现成员与OOP安全集合的添加,删除和转换的完美方式。我倾向于使用的“较小的邪恶”是 doAction - 方法和通知 - 方法。所以成员集合示例看起来像这样(在Java中):
class Member{
private Collection owner;
// notification methods
public void notifyMoved(Collection to){
owner = to;
}
// action methods
public void moveTo(Collection to){
owner.notifyRemoved(this);
to.notifyAdded(this);
owner = to;
}
}
class Collection{
private List<Member> members;
// notification methods
public void notifyAdded(Member item){
members.add(item);
}
public void notifyRemoved(Memer item){
members.remove(item);
}
// action methods
public void add(Member item){
item.notifyMoved(this);
members.add(item);
}
}
问题是通过直接调用通知方法可能会破坏一致性。 有没有更好的方法来实现这样的事情? C ++有朋友,但一般来说Java和OOP呢?
修改即可。在Java中,我可以将它们放在一个包中,但我不想这样做只是为了能够访问某些方法。我的问题更为一般和理论 - 如果行动(方法)与一个特定的对象类无关,那么它应放在何处;如果这些行动需要访问他们的私人,该怎么办。
答案 0 :(得分:1)
这是java的缺点,因为它缺乏“朋友”的概念。您可以将它们放在同一个包中,并为方法使用“package”访问修饰符(package = no access modifier)。