从Java核心违反迭代器中的单一责任原则

kap*_*and 7 java oop iterator design-patterns solid-principles

为什么java.util.Iterator界面有方法remove()

当然,有时候这种方法是必要的,所有人都习惯了它的存在.但实际上迭代器的主要和唯一目的只是提供访问容器元素.当有人想为这个界面创建自己的实现,并且不能或不想以任何理由提供删除元素的能力时,他就被迫抛出UnsupportedOperationException.扔掉那个异常通常表明一个没有深思熟虑的架构或设计中的一些缺陷.

我真的不明白这样决定的原因.我想这将更正确地分离特定的子接口以支持可选方法:

图

任何合理的版本为什么remove()是一部分Iterator?这个直接违反单一责任原则的例子不是SOLID吗?

Gho*_*ica 6

除了花哨的技术答案之外......请考虑时间表."单一责任原则"是由罗伯特·马丁在90年代中后期的某个时刻创造的.

Java迭代器接口与Java 1.2一起出现; 所以在1998年左右.

在开发Java的早期版本时,Sun的人们很可能从未听说过这个概念.

当然,许多聪明的人在没有阅读有关它的书的情况下也有相同的想法...所以一个优秀的设计师可能已经实施了"SRP"而不知道"SRP" - 但它也需要高度的意识来揭开所有的大大小小违反这条规则......