【问题标题】:Tight and loose coupling紧耦合和松耦合
【发布时间】:2017-05-09 22:11:39
【问题描述】:

谁能解释一下为什么第一个代码块是紧耦合的,而另一个是松耦合的?

// tightly coupled
class Employee {  
    Address address;  
    Employee(){  
        address=new Address();  
    }  
}

//loosely coupled
class Employee { 
    Address address;  
    Employee(Address address){  
       this.address=address;  
    }  
} 

【问题讨论】:

  • Coupling and cohesion的可能重复
  • 感谢您的努力,andre,我已经知道定义,如果您按照我提到的上述代码回答,那就太好了。
  • 我们需要寻找确切的使用案例来确定案例是否恰好是紧密耦合的。在您的情况下,对于 EmployeeAddress 实体,Employee 类不创建地址本身,而是在对象创建或使用设置器时将其从外部注入是有意义的。通过这种方式,我们允许外部框架(如 hibernate 或 spring)对其进行管理,并且我们可以让许多员工使用相同的地址。

标签: spring coupling


【解决方案1】:

Employee类需要一个Address,所以Address是Employee的依赖。

// tightly coupled
class Employee {  
    Address address;  
    Employee(){  
        address=new Address();  
    }  
}

在第一种情况下,Employee 负责创建 Address 的实例,因此 Employee 与 Address 紧密耦合。

//loosely coupled
class Employee { 
    Address address;  
    Employee(Address address){  
       this.address=address;  
    }  
} 

在第二种情况下,Address 将在外部提供给 Employee,因此 Employee 与 Address 没有紧密耦合。

让我们举个例子。这里我们有Address 的两个实现,即HomeAddressWorkAddress。由于在第一种情况下Employee 负责实例化Address,因此它与家庭或工作地址紧密耦合。但是,在第二种情况下,Employee 类可以使用已分配给它的任何 Address

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2013-12-25
    • 1970-01-01
    • 2022-07-06
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多