问题描述
如果c依赖于a和b,ab之间平行,那么a想调用b但是不想依赖于b,怎么做
思路
可以使用接口和依赖注入来解耦模块之间的关系。
代码
1. 定义接口
首先,定义一个接口,其中包含a想要使用的方法。
// 接口定义
public interface BInterface{
void methodB();
}
2. 实现接口
B模块实现这个接口。
// B模块实现接口
public class B implements BInterface{
@Override
public void methodB(){
// 实现具体的方法逻辑
}
}
3. A模块不直接依赖B模块
A模块不直接依赖于B,而是通过接口依赖。
// A模块依赖接口
public class A{
private BInterface b;
// 通过构造函数注入B模块的实例
public A(BInterface b){
this.b = b;
}
// A模块使用B模块的方法
public void methodA(){
// 调用B模块的方法
b.methodB();
}
}
4. 使用依赖注入
在程序的入口或配置中,创建B的实例,并将其注入A。
public class Main{
public static void main(String[] args){
// 创建B的实例
BInterface b = new B();
// 创建A的实例,并注入B
A a = new A(b);
// 在A中调用B的方法
a.methodA();
}
}
通过这种方式,A模块不直接依赖于B模块,而是通过接口依赖,这有助于减少模块之间的耦合。这种设计模式通常称为依赖注入,它使得代码更加灵活,易于测试,并支持替换不同的实现。