【发布时间】:2012-07-09 10:00:31
【问题描述】:
好的,假设我有一个类,X 和 X 是与其他对象有聚合关系的东西。让我们假设 X 是一个足球场。
X 是全班观众。但是,每个观众对特定活动的行为不同。而不是 IF 语句,我希望不同的行为出现在观察者类中,以便我可以使用动态绑定。
但是,问题在于观众的行为会影响“足球场”课程。所以我正在考虑将“this”从足球场类通过一个方法传递给观众类,以便观众类可以对足球场类做点什么?
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() 中的行为,以便我可以将许多不同类型的 SpectatorSuperClass 作为属性传递给 SoccerStadium,然后具有不同的行为。
编辑:如果我通过 Spectator 构造函数将 Stadium 的引用传递给 Specator,而不是传递 this,会怎样?
【问题讨论】:
-
我相信纯粹主义者会因为紧密耦合而畏缩这种技术,但它似乎被广泛使用。 “更好”的方法可能是创建体育场实现的接口,该接口定义外部实体可以对其执行的操作,并接受体育场作为观众类中的接口类型。
-
观众究竟是如何影响足球场的?在我看来,这是确定最佳关系类型的关键。
-
@Esteban,非常简单的逻辑,将属性设置为值。没有什么重的
-
@user997112:您已将此问题标记为
c#和java。它是哪一个?如果您使用 C#,则可以使用 events,这似乎非常适合您的用例。 -
很抱歉,因为它们非常相似。这是给java的。有未标记的 c#
标签: java oop design-patterns aggregation