私はクラスがあると仮定します.XとXは他のオブジェクトとの集約関係を持つものです。 Xがサッカースタジアムであると思わせる。これは不正なプログラミングですか?これをメソッドに渡す
Xはクラス観客でいっぱいです。しかし、特定の活動に対する各観客の行動は異なる。 IF文の代わりに、違う振る舞いを観客クラス内に入れて、動的バインディングを使うことができます。
しかし、問題は、観客の行動が「サッカースタジアム」クラスに影響することです。だから私は、サッカースタジアムのクラスからメソッドを介してSpectatorクラスに "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();
}
}
私は私がSoccerStadiumに渡された属性としてSpectatorSuperClassの異なる種類がたくさんあるし、別の行動を持つことができるように、私は動的バインディングを使用してSpecator.doSomething()
で動作を変更できるように、これを実行したいです。
EDIT:this
を渡すのではなく、スペクテーターコンストラクターを通じてスタジアムの参照を渡した場合はどうなりますか?
私は純粋なカップリングのために純粋主義者がこのテクニックを嫌うと信じていますが、広く使われているようです。 「より良い」アプローチは、スタジアムが実装するインターフェイスを作成し、外部エンティティがそれを行うことができるものを定義し、スタジアムを観客クラスのインターフェイスタイプとして受け入れることです。 – itsme86
スペイサーはサッカースタジアムにどのくらいの影響を与えますか?ここでは、最良のタイプの関係を決定することが重要なポイントです。 –
@Esteban、非常に単純なロジック、値に属性を設定する。重いものはありません – user997112