//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>
}
}
我的问题是:哪种模式的耦合度较低?在现实世界中哪种模式更受欢迎?
//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>
}
}
我的问题是:哪种模式的耦合度较低?在现实世界中哪种模式更受欢迎?
I will try to explain loose-coupling.
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.
我想说两者都没有真正的低耦合,它更依赖于实现。对耦合最好的简单解释是,如果 A 类的属性发生变化,那么 B 类需要更改多少。在这种情况下,方法foo
很可能必须在两种情况下进行相同的更改。
至于现实世界,这完全取决于情况。A类只用于B类吗?它是一个网络应用程序,您需要注入或退出 A 类吗?A班会是单身吗?什么将使用 B 类?每个班级甚至做什么?!
总之,在您查看每个类的功能以及它们将如何使用(这就是凝聚力的所在)之前,您不能以任何一种方式提出论点。
恕我直言,第二个选项(组合)是首选,因为:
A
B
可以自由更改其实现以使用其他类而不是A
完成其工作(不影响/重新编译调用代码)第一个选项(通过对象传递)在调用者和A
(尽管B
以任何一种方式耦合)之间创建了更大的耦合。