【发布时间】:2021-10-18 19:18:59
【问题描述】:
我无法理解多个类何时实现相同的接口,在我使用具体类作为 DI 之前,但在搜索和阅读之后,我被告知它应该取决于抽象。所以这是我的问题:
interface SomeInterface{
public void doSomething();
}
我们有两个实现接口的类:
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();
}
}
现在,当我实例化客户端类时,我只能在第一个或第二个构造函数中传递一个类,并且该方法将启动,但如果我想要两种方法怎么办?这个设计有什么问题?
【问题讨论】:
-
我相信答案很大程度上取决于您的模型。在某些情况下,最好创建几个单独的
ClientClass实例并独立调用testMethods,或者在其他情况下使用Composite 之类的设计模式 -
这个设计有什么问题? - 它本身并没有错,只是它一次可以处理一个
SomeInterface。如果您只需要其中两个,则可以使用 2 个成员变量,并在构造函数中期望 2 个参数。但是,如果您需要任何数量的它们,一些List或Set可能是更好的方法,稍后您可能还需要在构造函数之外更改SomeInterfaces 的集合。 -
让它更清晰。想象一下你的
ClientClass实际上是DatabaseConnector。您是否希望该类使用Mysql类和Postgres类中的方法连接到数据库?
标签: java oop interface abstraction