java就是这样糟糕的OO编程吗?通过方法传递
好的,假设我有一个类,X和X是与其他对象有聚合关系的东西。让我们假设X是一个足球场
X教室里挤满了观众。然而,每个观众在特定活动中的行为是不同的。我希望不同的行为在旁观者类中,而不是IF语句,这样我就可以使用动态绑定
然而,问题是观众的行为会影响“足球场”的级别。所以我想通过一种方法把“这个”从足球场传递给观众,这样观众可以对足球场做些什么
public class SoccerStadium{
SpecatorInterface s = new Spectator();
public void SpectatorBehaviour(){
s.doSomething(this);
}
public void doSomethingthingBySpecator(){
}
}
public class Spectator implements SpecatorInterface{
public void doSomething(SoccerStadium s){
s.doSomethingthingBySpecator();
}
}
我只想这样做,这样我就可以使用动态绑定并改变Specator.doSomething()
中的行为,这样我就可以将许多不同类型的旁观者超类作为属性传递给SoccerStadium,然后拥有不同的行为
编辑:如果我通过观众构造器将体育场的引用传递给Specator,而不是传递this
,该怎么办
# 1 楼答案
我认为将其用作参数没有问题。然而,我不喜欢
new Spectator()
类中硬编码的SoccerStadium
调用。我相信你应该有一个带有createSpectator
方法的工厂,它可以接收一个参数,指示你打算创建哪种类型的观众# 2 楼答案
你的实现非常好,我以前见过这种情况。是的,你可以通过将体育场引用传递给观众构造器来保存它,这可能比每次需要时发送引用更干净
然而,我不太喜欢它;我更喜欢内部课程。目前还不完全清楚你想做什么,但类似的事情是可能的:
不幸的是,您必须将所有的“旁观者”类放在另一个类的中,这可能会导致一个非常长的文件,从而产生难看的代码
然而,我认为你绝对应该避免做这两件事,因为这肯定会让你的代码过于复杂
# 3 楼答案
对我来说,这种双向循环关系是个坏消息。如果观众想去剧院呢
我会让体育场成为观众安排的活动的订户,从而消除这种关系
。。。所以观众现在有了一种与任何感兴趣的人交流的方式,但不需要知道任何事情