设有2个类A和B,请给出3种不同的代码实例,使得A类和B类产生内容耦合,并阐述3个实例耦合的优缺点。
时间: 2024-10-14 10:11:12 浏览: 9
Java类初始化和实例化中的2个“雷区”
在面向对象编程中,内容耦合通常是由于两个类之间存在紧密的业务关联导致的,即一个类的操作直接依赖于另一个类的具体实现。以下是三种不同代码实例,展示了A类和B类之间的内容耦合:
1. **实例嵌套**:
```java
class A {
private B innerObject; // 内部持有B类型的对象
public void doSomething() {
innerObject.someMethod(); // 直接依赖B类的方法
}
}
// 实例B
class B {
public void someMethod() { /* ... */ }
}
```
优点:如果`someMethod()`的功能改变,仅需要修改`B`类即可。缺点:若A类过多地依赖B类的内部细节,将增加维护难度和A类的复杂性。
2. **硬编码接口引用**:
```java
class A {
private B specificInstance;
public A(B b) {
this.specificInstance = b;
}
public void doSomething() {
specificInstance.doSomethingElse();
}
}
class B {
public void doSomethingElse() { /* ... */ }
}
```
优点:体现了单一职责原则,每个类只关注自身功能。缺点:如果B类的实现发生变化,A类也需要相应更新。
3. **静态方法耦合**:
```java
class A {
public static void doSomething(B b) {
b.specialFunction(); // 调用B类的静态方法
}
}
class B {
public static void specialFunction() { /* ... */ }
}
```
优点:提高了代码的复用性和灵活性,无需创建B类的对象。缺点:全局访问可能会导致难以管理和测试,而且当B类修改时,所有调用的地方都受影响。
阅读全文