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

I will try to explain loose-coupling.

  1. Program in interface, that gives use the possibility of passing objects of different type which implements the same interface during runtime, and here classes from different inheritance tree can implement the same interface.

eg:

 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

  }

Encapsulate the behaviour which keeps changing.... into Abstract classes, or Interfaces, so it will be easy when changes comes, and as it is loosely coupled, there are less chances for the code to break.

于 2012-05-21T18:43:00.827 回答
0

我想说两者都没有真正的低耦合,它更依赖于实现。对耦合最好的简单解释是,如果 A 类的属性发生变化,那么 B 类需要更改多少。在这种情况下,方法foo很可能必须在两种情况下进行相同的更改。

至于现实世界,这完全取决于情况。A类只用于B类吗?它是一个网络应用程序,您需要注入或退出 A 类吗?A班会是单身吗?什么将使用 B 类?每个班级甚至做什么?!

总之,在您查看每个类的功能以及它们将如何使用(这就是凝聚力的所在)之前,您不能以任何一种方式提出论点。

于 2012-05-21T09:39:14.297 回答
0

恕我直言,第二个选项(组合)是首选,因为:

  • 调用者不需要知道A
  • B可以自由更改其实现以使用其他类而不是A完成其工作(不影响/重新编译调用代码)

第一个选项(通过对象传递)在调用者和A(尽管B以任何一种方式耦合)之间创建了更大的耦合。

于 2012-05-21T18:22:53.663 回答