在我使用具体类作为 DI 之前,我很难理解多个类何时实现相同的接口(interface),但在搜索和阅读之后,我被告知它应该依赖于abstaraction。所以这是我的问题:
interface SomeInterface{
public void doSomething();
}
我们有两个实现接口(interface)的类:
class FirstClass implements SomeInterface{
@Override
public void doSomething(){
System.out.print("First class is doing something");
}
}
class SecondClass implements SomeInterface {
@Override
public void doSomething() {
System.out.print("Second class is doing something");
}
}
现在我有一个客户,我想使用第一类和第二类的方法:
class ClientClass {
private SomeInterface someInterface;
public ClientClass(SomeInterface someInterface) {
this.someInterface = someInterface;
}
public void testMethod() {
this.someInterface.doSomething();
}
}
现在,当我实例化 Client 类时,我只能在构造函数中传递一个类(第一个或第二个),并且该方法将启动,但如果我想要这两个方法怎么办?这个设计有什么问题吗?
最佳答案
您可以使用这两种方法,只是不能同时使用(除非您构建另一个允许您进行复合实现的实现)。
例如,您可以拥有 ClientClass
的不同实例使用 SomeInterface
的不同实现:
ClientClass clA = new ClientClass(new FirstClass());
ClientClass clB = new ClientClass(new SecondClass());
现在你有两个对象,clA
和clB
,它们具有相同的类型,但行为不同,因为它们包含 SomeInterface
的不同实例。 .
当你给图片添加DI(依赖注入(inject))时,你可以写出ClientClass
的代码以它不知道的方式实例FirstClass
或SecondClass
,这使您可以使客户端实现独立于 SomeInterface
层次结构。
关于java - 多个类实现相同接口(interface)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68807908/