当前位置: 首页 > 知识库问答 >
问题:

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

堵彬彬
2023-03-14

请参见以下Dao设计模式的组件:

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

数据访问对象接口——该接口定义了对模型对象执行的标准操作。

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

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

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

共有3个答案

康鹏云
2023-03-14

我的问题是,当我们有一个具体类的时候,为什么我们需要一个INTERFACE,为什么我们不能直接使用它。

这是简单的抽象。假设您使用Oracle数据库作为数据库。因此,具体类将具有访问(CRUD ops)Oracle数据库的逻辑。明天,如果您的许可证到期,您不再想使用Oracle DB,那么您将想使用MySQL。现在,您必须重写前面提到的具体类,同时还必须重写服务层,因为通过直接使用具体类及其方法,您可以在服务层和数据访问层之间实现紧密耦合。设计系统时应始终考虑松耦合。

如果要使用接口而不是具体的类,那么服务层和数据访问层有一个如何交互的约定。因此,服务层不会受到数据层变化的影响,因为契约没有变化,它们可以以相同的旧方式进行交互。

凤修为
2023-03-14

实际上,当只有一个实现时,没有必要有一个接口。但在某些情况下,你并不依赖于具体的课程,这是非常实际的:

>

  • 测试调用DAO的服务:您可以编写一个模拟DAO,其行为与您在测试中需要的一样(例如,模拟没有DB连接,这很难自动复制)

    在DAO周围生成一些图层。可以使用AOP围绕DAO方法生成缓存或事务处理。在这种情况下,您有一个实现DAO接口的对象,但与原始实现无关。

    切换DB技术。如果从MySQL切换到DB2,只需编写接口的另一个实现,并切换MySQL DAO和DB2 DAO

    因此,为DAO和服务提供接口是一个很好的做法。

  • 施辉
    2023-03-14

    不仅在DAO设计模式中,而且在其他设计模式中,接口的使用也有点令人困惑。

    接口是Java中最好使用的概念之一。让我用一个例子来解释这一点:假设你为汽车设计了一个全球定位系统设备,它可以看着地图,自动将汽车转向地图上看到的方向。这种全球定位系统设备可以用于奔驰、菲亚特等许多汽车。对于每辆汽车,左转弯或右转弯的机构可能根据汽车系统的实施而不同。因此,这些功能应该由汽车制造商编写,因此这些方法被放在一个界面中,由汽车制造商根据汽车的实现来实现。接口只包括一组由汽车制造商定义的功能声明(在本例中)。拿到了吗?

    要了解更多关于接口的信息以及它们为什么有用,请阅读本文。

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

    在下面的答案中指出的许多其他好处中,您可以为实现DAO接口的不同数据结构(derby db、大型堆栈等)创建许多DAO类。好处是,每个类都可以存储在DAO接口变量中,该变量称为多态性。

     类似资料:
    • 问题内容: 请参阅以下Dao设计模式的组件: 数据访问对象模式或DAO模式用于将底层数据访问API或操作与高层业务服务分开。以下是数据访问对象模式的参与者。 数据访问对象接口-此接口定义要在模型对象上执行的标准操作。 数据访问对象具体类-此类实现上述接口。此类负责从可以是数据库/ xml或任何其他存储机制的数据源获取数据。 模型对象或值对象-此对象是简单的POJO,其中包含用于存储使用DAO类检索

    • 这种设计模式是否只适用于一个接口,因为我能找到的只是谈论由类实现的接口? 就像网站http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm 如果我有很多接口,那么设计模式很好用,那么类图会是谁? 谢谢。

    • 问题内容: 当按以下方式将比较器应用于列表时,此处使用的设计模式是什么?使用的技术是什么? 问题答案: TL; DR : 是简单多态替换的示例,无论您使用 功能编程 还是 面向对象编程 进行此替换。术语 策略模式 不能与 多态性 或 函数编程 互换。 仍然可以说我们正在将排序传递给该方法,但是如果没有,则它不是“ 策略模式”的 同义词。 当按以下方式将比较器应用于列表时,此处使用的设计模式是什么?

    • 介绍 桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化。 正文 桥接模式最常用在事件监控上,先看一段代码: addEvent(element, 'click', getBeerById); function getBeerById(e) { var id = this.id; asyncRequest('GET', 'beer.uri?id=' + id, functi

    • 桥接(Bridge) Intent 将抽象与实现分离开来,使它们可以独立变化。 Class Diagram Abstraction:定义抽象类的接口 Implementor:定义实现类接口 Implementation RemoteControl 表示遥控器,指代 Abstraction。 TV 表示电视,指代 Implementor。 桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电

    • 各大设计模式例子参考:CSDN专栏 . C++ 设计模式 系列博文 设计模式工程目录 单例模式 单例模式例子 抽象工厂模式 抽象工厂模式例子 适配器模式 适配器模式例子 桥接模式 桥接模式例子 观察者模式 观察者模式例子 设计模式的六大原则 单一职责原则(SRP,Single Responsibility Principle) 里氏替换原则(LSP,Liskov Substitution Prin