哪种模式在java中具有较低的耦合:将对象传递给方法或使用组合


//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>
   }
}

我的问题是:哪种模式的耦合较低?在现实世界中哪种模式更受欢迎?

我将尝试解释松耦合。

  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
  }

封装不断变化的行为。到抽象类或接口中,因此当更改来临时会很容易,并且由于它是松散耦合的,因此代码中断的机会较小。

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

至于现实世界,这完全取决于情况。A类只用于B类吗?它是一个 Web 应用程序,您需要注入还是输出 A 类?A班会成为单身人士吗?什么将使用B类?每个班级到底做什么?!

总之,在

你查看每个类的功能以及如何使用它们之前,你不能以任何一种方式进行论证(这就是凝聚力的用武之地(。

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

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

第一个选项(按对象传递(在调用方和A之间创建更大的耦合(尽管B无论哪种方式都是耦合的(。

最新更新