gpt4 book ai didi

oop - 为什么我们应该将接口(interface)与使用它们的类而不是实现它们的类一起放置?

转载 作者:行者123 更新时间:2023-12-04 06:26:46 26 4
gpt4 key购买 nike

我正在阅读 Robert C. Martin 的一篇文章,他在某个地方举了一个这样的例子:

第一个图像显示两个包之间存在循环依赖关系。为了消除这种依赖关系,在第二个图像中添加了一个新接口(interface)。 B 实现接口(interface),Y 使用它。马丁提出以下观点:

Interfaces are very often included in the package that uses them, rather than in the package that implements them.



我的问题是,我们为什么要这样安排接口(interface)?以这种方式封装接口(interface)背后的原因是什么?根据共同封闭原则,一起改变的类应该保持在一起。就变化而言,界面是否更接近其实现者或用户?

enter image description here

最佳答案

从技术上讲,用户并不比实现者更接近界面。就变化而言,当界面发生变化时,两者都需要发生变化。

但是,为什么界面会改变?

用户调用一个接口(interface),因此它可以独立于任何可用的实现者。因此,接口(interface)的定义取决于用户的需求。

由于用户规定了界面的定义,因此如果用户不需要,更改界面是没有意义的。需要更改接口(interface)以适应实现的实现者应该发出危险信号。为什么它需要用户提供更多或不同的信息?这对用户有什么用?

此外,实现者“仅仅”依赖于接口(interface),因为它需要为接口(interface)中的每个方法提供实现。但是提供空 stub 是免费的,本质上是向其客户提供 NOP。

因此,用户的需求插入了界面的变化,而界面的变化插入了实现者的变化。因此,用户在功能上比实现者更接近接口(interface)。这是一个很好的案例来声明与用户而不是实现者的接口(interface)。

关于oop - 为什么我们应该将接口(interface)与使用它们的类而不是实现它们的类一起放置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5840219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com