问题
如何支持低依赖性,低变化影响并增加重用?
解决方案
分配责任以使耦合保持低水平。
关于低耦合的要点
- 模块之间不应该有太多的依赖关系,即使有依赖关系,也应该通过接口,并且应该是最小的。
- 避免两个类之间的紧密耦合(如果一个类想要调用第二个类的逻辑,那么第一个类需要第二个类的对象,这意味着第一个类创建第二个类的对象)。
- 控制反转(IoC)/依赖注入(DI) - DI对象在创建时由某些第三方(即Java EE CDI,Spring DI ...)协调它们在系统中的每个对象的依赖关系。对象不需要创建或获取它们的依赖项,依赖项被注入到需要它们的对象中。松耦合是DI的主要优点。
执行

这是松耦合的一个例子。在这个类中,Traveler类没有与汽车或自行车实现紧密耦合。相反,通过应用依赖注入机制,实现了松耦合,从而允许使用已实现Vehicle 接口的任何类开始旅程。
步骤1: Vehicle 接口允许松散耦合实现。
interface Vehicle {
public void move();
}
|
步骤2: Car 类实现Vehicle接口。
class Car implements Vehicle {
@Override
public void move() {
System.out.println("Car is moving");
}
}
|
步骤3: Bike 类实现Vehicle接口。
class Bike implements Vehicle {
@Override
public void move() {
System.out.println("Bike is moving");
}
}
|
步骤4: 现在创建 Traveler 类,其中包含对Vehicle接口的引用 。
class Traveler {
private Vehicle v;
public Vehicle getV() {
return v;
}
public void setV(Vehicle v) {
this.v = v;
}
public void startJourney() {
v.move();
}
}
|
步骤5:松散耦合示例的测试类 - Traveler是松散耦合的示例。
public static void main(String[] args) {
Traveler traveler = new Traveler();
traveler.setV(new Car()); // Inject Car dependency
traveler.startJourney(); // start journey by Car
traveler.setV(new Bike()); // Inject Bike dependency
traveler.startJourney(); // Start journey by Bike
}
|