3
//Ex1: (passing by object)
class A {
}

class B {
   void foo(A a) {
      <do something with a>
   }
}

//Ex2: (composition)
class C {
   A a
   void foo(){
      <do something with a>
   }
}

私の質問は次のとおりです。カップリングが低いパターンはどれですか? そして、現実の世界ではどのパターンがより好まれますか?

4

3 に答える 3

1

疎結合について説明します。

  1. 実行時に同じインターフェイスを実装する異なるタイプのオブジェクトを渡す可能性を提供するインターフェイス内のプログラム。ここでは、異なる継承ツリーのクラスが同じインターフェイスを実装できます。

例えば:

 Animal is the Interface

    Dog class implements Animal
    Cat class implements Animal
    Lion class implements Animal

   /////////////////
   calling method
  /////////////////

   callAnimal(new Dog);



  /////////////////
   called method
  /////////////////

  public void (Animal a){

   // some code

  }

変化し続ける動作を抽象クラスまたはインターフェイスにカプセル化します。これにより、変更が発生したときに簡単になり、疎結合であるため、コードが壊れる可能性が少なくなります。

于 2012-05-21T18:43:00.827 に答える
0

私見では、次の理由から、2 番目のオプション (構成) が推奨されます。

  • 発信者は知る必要はありませんA
  • Bジョブを実行する以外のクラスを使用するように実装を自由に変更できますA(呼び出しコードに影響を与えたり再コンパイルしたりする必要はありません)。

最初のオプション (オブジェクトによる受け渡し) は、呼び出し元とA(Bいずれかの方法で結合されますが) の間により大きな結合を作成します。

于 2012-05-21T18:22:53.663 に答える
0

どちらも実際にはカップリングが低く、実装に依存していると思います。カップリングの最も簡単な説明は、クラス A のプロパティが変更された場合、クラス B を変更する必要があるということです。この場合、メソッドfooはほとんどの場合、両方のシナリオで同じ変更を行う必要があります。

現実の世界に関しては、状況に完全に依存しています。クラスAはクラスBでのみ使用されますか? これは Web アプリですか? クラス A をインジェクトまたはアウトジェクトする必要がありますか? クラスAはシングルトンになりますか? クラス B を使用するのは何ですか? 各クラスは何をしますか?

要約すると、各クラスの機能とそれらがどのように使用されるかを確認するまで、どちらの方法でも議論を行うことはできません (そこにまとまりが生まれます)。

于 2012-05-21T09:39:14.297 に答える