java - 多个类实现相同接口(interface)的问题

标签 java oop interface abstraction

在我使用具体类作为 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());

现在你有两个对象,clAclB ,它们具有相同的类型,但行为不同,因为它们包含 SomeInterface 的不同实例。 .

当你给图片添加DI(依赖注入(inject))时,你可以写出ClientClass的代码以它不知道的方式实例FirstClassSecondClass ,这使您可以使客户端实现独立于 SomeInterface层次结构。

关于java - 多个类实现相同接口(interface)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68807908/

相关文章:

c++ - 处理大量接口(interface)实现的正确方法是什么?

java - 从外部调用枚举方法

java - javax.servlet.Filter 对性能的影响?

java - Eclipse 找不到文件

c# - 继承与组合——在 OOP 架构考虑中

python - 使用 Python `isinstance` 是否正确?

c++ - C++ 中的 "Has a"关系,拥有一个类 "implement"多个抽象基类是最佳实践吗?

java - 如何将 MPAndroidChart RadarChart 制作成圆形

java - 将 Weblogic keystore 用于 Websphere MQ

c# - 避免许多继承类