use*_*112 6 java oop design-patterns aggregation
好吧,假设我有一个类,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();
}
}
Run Code Online (Sandbox Code Playgroud)
我只想这样做,这样我就可以使用动态绑定并改变行为,Specator.doSomething()这样我可以将许多不同类型的SpectatorSuperClass作为传递给SoccerStadium的属性然后具有不同的行为.
编辑:如果我通过Spectator构造函数将体育场的引用传递给Specator,而不是传递this怎么办?
你的实现绝对没问题,我以前见过这种事情。是的,您可以通过将 Stadium 引用传递给 Spectator 构造函数来保留 Stadium 引用,这可能比每次需要时都发送引用更干净。
然而,我不太喜欢它;我更喜欢内部类。目前还不完全清楚你想要做什么,但类似这样的事情是可能的:
public class Outer {
private int someVariable=0;
public void someMethod(){
ExtendsInner ei = new ExtendsInner();
ei.innerMethod();
System.out.println(someVariable);
}
private void anotherMethod(){
someVariable++;
}
public abstract class Inner {
public abstract void innerMethod();
}
public class ExtendsInner extends Inner{
public void innerMethod(){
anotherMethod();
someVariable++;
}
}
public static void main(String[] args){
Outer o = new Outer();
o.someMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,您必须将所有“观众”类放在另一个类中,这可能会导致一个非常长的文件,从而导致丑陋的代码。
然而,我认为你绝对应该避免做这两件事,因为它肯定会让你的代码过于复杂。