我经常这样做:
class Child{
Control*parent;
public:
Child(Control*theParent):parent(theParent){}
};
class Control{
Child child;
void makeChild(){ child=Child(this); }
//Control() : child(this) { } //another example
}
所以控件拥有并操作子控件,但是子控件仍然有对父控件的引用。
当我阅读有关程序设计模式等的一般主题时,似乎并不特别推荐这种组织对象的方法。我意识到存在风险,例如,您不希望您child
通过让其父母做只有父母应该自己决定做的事情来滥用其父母;在这种情况下,通过确保父母的关键方法是私有的,似乎很容易防止。但是你可能有另一个控制器来管理父级,在这种情况下,一些方法应该是公共的,现在你的孩子也可以访问这些,而实际上只有其他一些控制器应该操纵这些。
所以我可以看到这有多危险。
但我的问题是,什么是常见的替代方案?您需要父母拥有孩子,但您需要孩子能够偶尔通知父母。如果不是上述情况,怎么办?
Objective-C 有 NSNotificationCenter 允许通知而不实际传递引用,但这也很容易造成组织问题(为什么我的孩子会发出这个通知,谁会收到它?)