Java 8 开闭原则与默认实现

Java 8 开闭原则与默认实现,java-8,architecture,open-closed-principle,default-method,default-implementation,Java 8,Architecture,Open Closed Principle,Default Method,Default Implementation,Java8为接口引入了默认实现的概念?这不是违反了开闭原则吗,因为基于,似乎您总是可以打开界面来添加新功能?软件可以在界面中使用默认方法编写,同时遵守开闭原则或在界面中使用默认方法并违反开闭原则 开闭原则是一种设计/架构原则,程序员在设计和编程时应遵循该原则。Java语言无法强制使用它 由于Java语言不强制执行开闭原则,因此可以使用JDK1.0(Java的第一个版本)编写一组违反或遵守开闭原则的类,而只使用JDK1.0语言特性。 在接口或Java的任何最新特性中使用接口默认方法时,也可能违反或

Java8为接口引入了默认实现的概念?这不是违反了开闭原则吗,因为基于,似乎您总是可以打开界面来添加新功能?

软件可以在界面中使用默认方法编写,同时遵守开闭原则或在界面中使用默认方法并违反开闭原则

开闭原则是一种设计/架构原则,程序员在设计和编程时应遵循该原则。Java语言无法强制使用它

由于Java语言不强制执行开闭原则,因此可以使用JDK1.0(Java的第一个版本)编写一组违反或遵守开闭原则的类,而只使用JDK1.0语言特性。 在接口或Java的任何最新特性中使用接口默认方法时,也可能违反或遵守该原则。 坚持开闭原则取决于写什么和如何写。Java只是一种用来表达概念的语言。

在面向对象软件构造(Meyer,Bertrand 1988)中,引入了开闭原则:

“软件实体(类、模块、函数等)应开放以供扩展,但应关闭以供修改”

在任何一点上,它都表示需要显式接口(但事实并非如此)。此外,它明确表示,这也适用于功能,甚至整个模块


面向对象的代码可能违反此原则。。。或者不,独立于它所使用的句法结构。某些特定的构造可能会“邀请”OCP冲突,但如果我们处理得如此精细,抽象类将落在同一个桶中。

这个问题很可能会被关闭,因为它会征求意见。然而,考虑到这是一个有趣的问题,我将给出我的答案。不违反开闭原则。只要方法按照接口“契约”提供的隐式保证按预期运行,那么它是作为默认接口方法实现的、在关联的抽象类中还是在实现接口的类中实现的并不重要。从消费者的角度来看,没有任何变化。这不是“打开界面”的情况。开闭原则是关于一个实体,该实体因扩展而关闭,但因修改而关闭。默认方法是一种在扩展实体时允许更大自由度的机制,您无法使用默认方法来修改现有实现:即使在实现类以前具有相同签名的方法的地方添加了新添加的默认方法,默认方法也永远无法赢得具体实现,正如@Frelling所说,实现细节没有任何变化。由于向现有接口添加默认函数不会迫使开发人员在其他模块中进行更改,因此不会影响OCP的主要目标、代码的可重用性和可维护性,因此不会违反原则本身。还应注意的是,罗伯特·马丁(Robert Martin)在其关于OCP的文章中也提到,应该清楚的是,任何重大项目都不可能100%完成。