-1

オブジェクト(A)があり、オブジェクト(A)自体のスコープにも、そのメンバーのスコープにも属していない別のオブジェクト(B)のメソッドを実行する必要があるとします。

この問題を克服するには、次のいずれかの方法があります。

  • オブジェクトへの参照を、それを使用する可能性のあるオブジェクトに格納すると、メモリリークが発生する可能性があります

  • 使用する必要がある可能性のあるオブジェクトのゲッターを作成し、そのように使用します(これはおそらくベストプラクティスではありません)。

    anObject.getABC().getDEF().getHIG().DoSomething();
    
  • オブジェクトの一部を単一のトーンとして定義します。これは良い解決策かもしれませんが、それを覆っているリバリーを使用するときはいつでも、それは苦痛かもしれません、そのサブクラスはオーバーライドされたものでは機能しません。

  • 静的メンバー、おそらく最悪の方法。

私の質問:オブジェクト指向コードを維持しながら、それを行うための最良の方法は何ですか、そして何を考慮に入れるべきですか?

(質問は一般的なOOPに関するものですが、私はJAVAのコード例を好みます)

例:

  • ユーザーがメニュー上の何かをクリックすると、メニューに関連していないものや、メニューに密接に関連しているものに影響を与えるはずです。

  • メモリを解放する必要があるconsumeメソッドを持つクラスは、参照であるが直接関連していないオブジェクトにアクセスする必要があります。たとえば、キャンバスに描画された車のオブジェクトは、それ自体と配列から削除する必要があります。 GUIスレッドとは関係のない車のリストを保持します。

4

1 に答える 1

1

デメテルの法則は次のように述べています。見知らぬ人と話をしないでください。

AがBのメソッドを呼び出す必要がある場合、BはAの直接の依存関係である必要があります。Bが実際にはAの直接の依存関係ではなく、推移的な依存関係である場合、つまり、AはCに依存し、CはDに依存します。 Bに依存する場合、AはCのメソッドを呼び出す必要があります。CのメソッドはDのメソッドを呼び出し、Bのメソッドを呼び出します。

A --> C --> D --> B

例を読むと、Observable/Observerメソッドを探しているように見えます。例:メニューをクリックすると、メニューは、インターフェースのインスタンスであるオブザーバー(またはSwing / AWT用語ではリスナー)のメソッドを呼び出す必要があります。リスナーは、メニューのクリックを通知するために、自分自身をメニューに登録します。

于 2012-12-01T20:02:54.587 に答える