java8中的接口隔离原则和默认方法

5ssjco0h  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(424)

按接口隔离原则
不应强迫客户机实现不需要的接口方法
…所以我们应该定义接口来进行逻辑分离。
但是 default Java8中引入的方法提供了在java接口中实现方法的灵活性。java8似乎提供了增强接口的可行性,使其具有一些与核心逻辑无关的方法,但具有一些默认的或空的实现。
它不违反isp吗?

v7pvogib

v7pvogib1#

如果您打算这样做,isp将受到侵犯。您可以隔离接口,只履行一项职责。特定责任的方法组很可能遵循80-20规则。在80%的部分中,您可以为40-50%的方法提供默认实现。这40-50%的部分将是一个很少使用,因此默认值是可以的。如果接口只承担一项责任,它们很少会太大,而且通常都在isp中。

wtzytmuj

wtzytmuj2#

问得好。当然,它违反了接口隔离原则,我个人不喜欢默认实现的概念,因为它破坏了接口设计的美观,也破坏了一点精确的多态性。如果有人不知道isp的概念,那么他们将开始设计fat接口,并最终像所有东西一样打包在一个接口中。在代码设计过程中,人们的逻辑思考能力会下降。
这将以代码气味结束,我确信那些不知道这些概念的人将开始编写糟糕的代码。我相信默认实现是一个不需要的特性,因为它会让人们编写难闻的代码。

bxpogfeg

bxpogfeg3#

评论中的引语不太准确。isp的实际声明是,
客户机不应该被迫依赖于他们不使用的接口。
客户机是接口的使用者,即其抽象方法的调用方。客户机不是接口的实现者。如果我们遵循依赖倒置原则,客户端甚至不应该知道接口的具体实现。
isp背后的原因并不是为了避免开发人员实现额外的抽象方法。它是为了将那些方法的调用者从不必要的可传递依赖中拯救出来。额外的接口方法可能会引入额外的依赖项(通过声明或实现)。不使用这些方法的客户机仍然会获取这些依赖关系,并通过这些客户机对接口及其共享实现强制进行的更改与使用这些方法的客户机耦合。
将这一原则应用于 default 方法在Java8中,这种方法通过添加并非所有客户机都需要的依赖项,当然有可能违反isp。另一方面,也可以(并且优选地)采用 default 方法不添加任何依赖项,并且从不以任何中断客户端的方式进行更改。
总之, default 方法只是另一种工具。它们可能被用来帮助你的代码或伤害它。

相关问题