ant*_*nth 26 design-patterns single-responsibility-principle solid-principles interface-segregation-principle
界面隔离原则只是单一责任原则的替代吗?
我认为,如果我的类满足SRP,则无需提取多个接口.
所以ISP看起来像解决方案,以防我们因某些原因打破SRP.
我对吗 ?
And*_*erg 29
不.以一个类的例子为例,该类的职责是持久保存硬盘上的数据.将类拆分为读写部分并不具有实际意义.但是有些客户端应该只使用类来读取数据,有些客户端只能用来写数据,有些客户端只能用来读取数据.在这里应用ISP有三个不同的接口将是一个很好的解决方案.
ano*_*ave 18
我认为,如果我的类满足SRP,则无需提取多个接口.
单一责任原则是一个类(或一个方法)不应该有多个改变的理由(即每个只负责一个特征).为了表达这一点,您将发现自己在系统开发时创建新类.
例如,如果您从一个Car类开始并发现您需要更改齿轮的功能,您将把它提取到一个Gearbox类中.这意味着如果更改齿轮更改后面的机制,则父Car类不需要更改.如果你为你的汽车添加动力转向,你将再次将它提取到它自己的班级.收音机将是另一个班级.
这个抽象级联将在整个Car班级中发生.当你从Car自身向下移动时,你会发现每个班级的细节都会增加 - 例如,当Car班级可能有一种changeGear()方法允许用户选择一个装备时,Gearbox班级将会照看制作的细节.发生这种情况(例如,按下离合器,松开当前档位,选择新档位等)
但是,通过OO设计,我们不希望向Gearbox最终用户公开我们的细节- 我们希望它们以高抽象级别与我们的系统交互,而无需了解内部的工作原理.我们还想对这些内部进行封锁,以便我们可以在将来更改它们,而无需用户重构其代码(这就是为什么我们将它们标记为private或protected).
因此,我们只允许用户通过Car课程本身与我们的汽车互动.这就是接口隔离原理的用武之地.SRP确保Car类将其子组件委托给不同的类,但我们public仍将通过Car类本身调用所有方法.ISP确保不是将所有这些集中在一个接口中,而是创建逻辑区别并为相关功能公开多个接口.