Java使用一个接口(interface)在两个类中实现不同的方法

标签 java

我有一个 Java 问题,但我看不出如何才能正确实现这些方法。我不太擅长建筑。

数据管理器接口(interface)类:

public interface DataManager {
   public void readData();
   public void writeData();
}

数据抽象类:

public abstract class Data implements DataManager {
    @Override
    public void readData() {};
    @Override
    public void writeData() {};
}

数据读取器类:

public class DataReader extends Data {
   // I want to implement the readData() here
}

数据编写器类:

public class DataWriter extends Data {
   // I want to implement the writeData() here
}

如果我想在只有一个接口(interface)的两个不同的类中分别实现 readData() 和 writeData() ,可以吗?我不知道我为什么要这样做。当我向 reader 或 writer 类添加更多方法时,它可能看起来更干净、更容易。我应该只在一个类中实现所有内容吗?

我希望这个库允许使用管理器对象的用户访问数据读写。但是对于实现,我不知道如何才能正确执行。

最佳答案

看来您无意中发现了“接口(interface)隔离原则”的原因。 https://en.wikipedia.org/wiki/Interface_segregation_principle

虽然 DataReaderDataWriter 乍一看似乎相关,但将它们分组到您的公共(public)接口(interface) DataManager 中似乎很有意义,阅读和写作的工作是完全不同的,并且保证分离成两个接口(interface),例如IReaderIWriter

假设您有一个同时需要读取器和写入器的类,那么您的 DataManager 接口(interface)就有意义了。但是,没有什么可以阻止您传递两个对象,一个是 IReader 类型,另一个是 IWriter 类型即使它们是同一类 .但是您似乎已经将它们分为DataReaderDataWriter,这很好。正如其他答案之一所暗示的那样,这是单一责任主体的应用。

关于Java使用一个接口(interface)在两个类中实现不同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38838390/

相关文章:

java - 循环没有重置?

java - 为什么 G1GC 日志中对堆使用情况的描述不同

java - Play Framework - java.lang.RuntimeException : No main class detected

java - 尝试与 OrientDB 合作

java - 如何使代码更高效/更干净 - USACO 培训的首要任务

java - 将 Object[]arrayInteger 转换为 int[] arrayInt

java - 目标小程序或 JVM 进程突然退出

java - "main"org.apache.spark.SparkException : Task not serializable

java - 使用 Android-Camera2 API 访问 USB 摄像头

java - 使用在 source/build/target/product/security/中找到的 key 将 apk 签名为系统