回答
我不会说自己。一个班级可以承担一个责任,但是在这个过程中要做很多事情,并且为了履行其责任所需要做的每件事情都要实现一个界面。
此外,Java中的接口可用于说明该类所具有的属性(例如,Comparable
和Serializable
),但没有真正说出该类的责任。
但是,如果一个类实现了多个接口,其中每个接口对应于一个责任,那么然后是这将违反该原则。
“单一责任”取决于抽象层次。例如,考虑到系统级别的复杂系统可能有一个责任。例如,电视系统的责任是显示视频图像。在下一级,该系统由子系统,监视器,动力装置等组成。在这个级别,每个单元都有自己的责任。
以同样的方式,一个级别的一个级别可能被认为具有单一责任。但是,在较低层次上,它可能有其他组成模块(类,接口等)执行其部分工作。例如,学生班的职责是代表学生抽象。然而,它可能有另一个代表学生地址的单元(一个班级)。
这样,使用多个接口本身并不违反面向对象的原则。
也许,但不一定。
接口不是一个责任。 There's a very powerful mode of architecture,其将界面视为定义该对象可以在应用程序中播放的角色。
想一下这是什么意思。你可以有一个Person
类的各种接口(让我们使用.NET约定命名)
class Person : IAmAStudent, IDrawSocialSecurity, IAmACitizen {
public SocialSecurityNumber getSocialSecurityNumber() {
return this.ssn;
}
private SocialSecurityNumber ssn;
public Person(SocialSecurityNumber ssn) { this.ssn = ssn; }
}
现在显然这不能违反SRP。显然只有一个变化原因 - 如果人与社会安全号码之间的关系发生变化。然而,该对象实现了许多接口,并在应用程序中扮演了几个角色
现在,如果您实施的多个接口公开不同的功能,您可能会违反SRP,但这也可能是一个判断呼叫。单一责任原则对于实现松耦合来说是一个很好的经验法则,但这不是镇上唯一的理想。还有高凝聚力其中规定相关的代码应该共同生活。这两者基本上存在矛盾(尽管通常有很多方法可以实现良好的平衡)。所以你可能会合理地选择一个在另一个的方向,并有意识地决定违反SRP。
最终,SRP和所有SOLID规则更多的是确保您按照特定的思路思考,而不是每次盲目追随他们。
- 1. 单一职责原则的实现
- 2. 单一责任原则是否违规
- 3. 实现某些东西的主类是否违反单一责任原则?
- 4. 我的代码是否违反单一责任原则?
- 5. 退出($ status)是否违反单一责任原则?
- 6. 严格遵守单一责任原则是否违反封装?
- 7. “富域模式”能否违反单一责任原则?
- 8. PHPMD说违反单一职责原则具有布尔默认值参数
- 9. 什么时候违反单一责任原则是合理的?
- 10. 单一职责原则综合类
- 11. 了解单一职责原则
- 12. 单一职责原则和聚合
- 13. 单一责任原则是否适用于职能?
- 14. “回归成功”的方法是否违反单一责任原则?
- 15. 自并流测试模式是否违反单一责任原则?
- 16. 以下代码中的类CommaDelimLog是否违反单一责任原则?
- 17. 生成器设计模式是否违反单一责任原则?
- 18. 实用课程是否允许使用单一职责原则(SRP)
- 19. 抽象工厂违反单一责任原则?
- 20. 违反Java核心迭代器中的单一责任原则
- 21. IClientValidatable实现是否违反了MVC中的DRY原则?
- 22. 单一职责原则在特定代码上的实施
- 23. 单一职责原则和实体类别
- 24. 单一职责原则:职业水平或方法水平
- 25. 您违反单一责任原则的最佳范例是什么?
- 26. 单一职责
- 27. SOLID - 单一职责原则是否适用于班级中的方法?
- 28. 违反SOLID原则
- 29. 为什么一个类没有实现ISerializable接口违反MissingSerializationConstructorRule
- 30. 这个班是否遵循单一责任原则?
如果该单一责任需要它实现多个接口,则不是。 – oldrinb 2012-08-07 23:05:41