为什么在 Dao 设计模式或其他设计模式中使用接口

2024-01-02

请参阅以下 Dao 设计模式的组成部分:

数据访问对象模式或 DAO 模式用于将低级数据访问 API 或操作与高级业务服务分开。以下是数据访问对象模式的参与者。

数据访问对象接口 - 该接口定义要在模型对象上执行的标准操作。

数据访问对象具体类 - 该类实现上述接口。该类负责从数据源获取数据,数据源可以是数据库/xml 或任何其他存储机制。

模型对象或值对象 - 该对象是简单的 POJO,包含 get/set 方法来存储使用 DAO 类检索的数据。

当我们有一个具体的类时,为什么我们需要一个 INTERFACE 并且为什么我们不能直接使用它?这可能是一个天真的问题,但请帮我弄清楚这件事。不仅在 DAO 设计模式中,在其他设计模式中,INTERFACE 的使用也有点令人困惑。我同意这与代码可重用性和减少耦合有关。但任何人都可以进一步解释一下吗?


不仅在DAO设计模式中,在其他设计模式中也使用 INTERFACE 有点混乱。

接口是 Java 中最常用的概念之一。让我用一个例子来解释这一点:假设您设计了一个汽车 GPS 设备,它可以查看地图并自动将汽车转向地图中所示的方向。该GPS设备可用于许多汽车,如奔驰、菲亚特等。对于每辆汽车,左转或右转的机制可能会有所不同,具体取决于汽车系统的实现。所以,这些功能应该由汽车制造商编写,因此这些方法被放入一个接口中,该接口由汽车制造商根据其汽车的实现来实现。该接口仅包含一组功能声明由汽车制造商定义(在本例中)。知道了?

要了解有关接口的更多信息以及它们为何有用,请阅读本文 http://www.tutorialspoint.com/java/java_interfaces.htm.

我的问题是:当我们有一个具体的接口时,为什么我们还需要一个接口? 类以及为什么我们不能直接使用它。

在下面的答案中指出的许多其他好处中,您可以为不同的数据结构(derby db、巨大的堆栈等)创建许多实现 DAO 接口的 DAO 类。好处是,每个类都可以存储在 DAO 接口变量中,它被称为多态性 http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 Dao 设计模式或其他设计模式中使用接口 的相关文章

随机推荐

  • 如何在 pandas 数据框中进行 SQL 样式聚合

    我希望有一个SQLPython 中的样式聚合 Example DataFrame df pd DataFrame ID 1 1 2 2 2 revenue 1 3 5 1 5 month 2012 01 01 2012 01 01 2012
  • numpy:将 argsort 应用于数组

    The argsort http docs scipy org doc numpy reference generated numpy argsort html numpy argsort函数返回一个索引矩阵 可用于索引原始数组 以便结果与
  • bash 合并多行

    我有一个文件看起来像 id001 success 100 id002 success 99 id002 failed 1 id003 failed 100 id004 success 50 id004 failed 50 我想将其格式化为
  • 用 Java 获取本月的最后一个星期五

    我正在开发一个项目 要求将日期计算为给定月份的最后一个星期五 我想我有一个仅使用标准 Java 的解决方案 但我想知道是否有人知道更简洁或更高效的解决方案 以下是我今年测试的内容 for int month 0 month lt 13 mo
  • 如何让 EFCore 内存数据库自动递增非键字段

    我们有一个以 guid 为键的实体 以及另一个基于自动递增 int 属性的人类可读键 运行应用程序时 这将按预期工作 出于测试目的 我们使用 EF 内存数据库 但这似乎只会自动递增列 如果它也是键 使用属性注释属性或 Fluent API
  • 如何从 google place api 获取营业时间

    这里我有一个工作正常的代码 所以这里是简单的谷歌位置代码 它根据位置向我显示一个位置 我在每个标记上添加一个标签 这样 http jsbin com UqafeCI 4 edit http jsbin com UqafeCI 4 edit
  • 您必须为 TextView android 错误提供资源 ID

    我一整天都在尝试解决这个错误 我不明白为什么我的 logcat 打印 05 06 21 45 59 559 ERROR ConversationList 9023 We have chats 05 06 21 45 59 609 ERROR
  • 使用php邮件功能有限制吗?

    我正在使用 php 和 mysql 我将发送 10k 一万多 封电子邮件来更新我的订阅者 这是我第一次发送它们 我将使用 php 邮件功能 基本上这就是我要做的 首先从数据库中获取数据 Select name email FROM data
  • 如何处理 AES CTR 的 IV/Nonce/Counter?

    import javax crypto Cipher public abstract class Crypto private static final String CIPHER ALGORITHM AES CTR NoPadding p
  • numpy ValueError 形状未对齐

    所以我正在尝试改编迈克尔 尼尔森的神经网络http neuralnetworksanddeeplearning com chap1 html http neuralnetworksanddeeplearning com chap1 html
  • 错误[Ljava.lang.Object;将 X509Certificate 的数组列表转换为数组时,无法转换为 [Ljava.security.cert.X509Certificate

    我对这个 ssl 和证书很陌生 我有一个 jks 文件 其中包含服务器信任的一些证书 我试图从 jks 文件中读取所有证书并将其返回到 getAcceptedIssuers 方法 证书的类型为 X509Certificate 我实现的方法正
  • TabBarView 页面未正确重建

    我正在尝试在每一页上显示选项卡编号TabBarView 通过读取其索引TabController 但由于某种原因 即使在日志中打印了正确的值 该值在视觉上似乎也没有正确更新 import package flutter material d
  • iconv() 与. utf8_encode()

    当您有一个与 UTF 8 不同的字符集并且需要将其转换为 JSON 格式以将其迁移到数据库时 可以在 PHP 中使用两种方法 调用 utf8 encode 和 iconv 我想知道哪一种性能更好 什么时候方便使用其中一种 当您的字符集与 U
  • 添加内部超链接到 pdf

    我有一个 PDF 文档 我想向其中添加内部超链接 具体来说 第 1 页包含一个我想要使其可点击的目录 我的想法是在第 1 页的预定位置创建矩形框 该矩形框应链接到第 2 3 我发现这篇文章讨论了使用上面描述的方法添加内部超链接 http b
  • 无法在文件中查找字符串并使用 Inno Setup 填充它?

    I have demo properties文件 我可以加载文件并迭代以获取其中存在的所有值 hibernate connection username jack hibernate connection password queen hi
  • 减小 Excel 文件大小 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在一家excel questions tagged excel应用程序 并为用户提供一个菜单以在该 Excel 应用程序 Excel 工
  • Asp.Net 拒绝用户访问某些页面

    如何允许用户访问我的 Web 应用程序 但拒绝他们访问特定页面 我希望允许更多用户使用我构建的应用程序 但有几个页面我不希望他们能够访问 这是我现在在 Web config 中的内容
  • Angular 6:onChange mat-slide-toggle 条件验证从对象数组中仅选择一个选项

    我有一份清单mat slide toggle 一次只有一个滑块将保持启用状态 而其他滑块将保持禁用状态 现在 当单击该启用的滑块时 其值将被更改 同时其他滑块列表将被启用以供选择 一旦选择一个滑块 其他滑块将被禁用 所以 简而言之 整个数组
  • 为什么字节码编程不如汇编编程那么流行或盛行?

    您可以在互联网上看到汇编代码和汇编编码器 但几乎没有字节码 这是为什么 汇编编程的需求和优点也适用于字节码编程 字节码编程远不如汇编编程流行 常见的另一个原因是字节码的通用性 它的简单性 字节码指令集主要是 ultra RISC 非常简单的
  • 为什么在 Dao 设计模式或其他设计模式中使用接口

    请参阅以下 Dao 设计模式的组成部分 数据访问对象模式或 DAO 模式用于将低级数据访问 API 或操作与高级业务服务分开 以下是数据访问对象模式的参与者 数据访问对象接口 该接口定义要在模型对象上执行的标准操作 数据访问对象具体类 该类