回答
我不会说自己。一个班级可以承担一个责任,但是在这个过程中要做很多事情,并且为了履行其责任所需要做的每件事情都要实现一个界面。
此外,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. 自并流测试模式是否违反单一责任原则?
- 6. 抽象工厂违反单一责任原则?
- 7. 违反Java核心迭代器中的单一责任原则
- 8. 单一职责原则在特定代码上的实施
- 9. 您违反单一责任原则的最佳范例是什么?
- 10. 单一职责
- 11. 这个班是否遵循单一责任原则?
- 12. 这个ruby模式是否遵守单一责任原则?
- 13. 如何在MVVM中构建ViewModel不违反单一责任原则?
- 14. 是单一责任原则OOP的一个规则?
- 15. 在“现实世界”中使用单一责任原则
- 16. 这是单一责任原则的正确实施
- 17. 这是违反Liskov替换原则吗?
- 18. 为了表现,你会否违反REST的幂等原则?
- 19. 有没有办法违背单一责任原则做了不止一件事?
- 20. 这是否违反了“最左边最长”的原则?
- 21. 防御性编程是否违反DRY原则?
- 22. 服务层类是否违反SRP原则?
- 23. 从ViewModel访问数据库是否违反了MVC原则?
- 24. 工厂方法模式是否违反开放/关闭原则?
- 25. 单一责任原则和Backbone.View
- 26. 帮助理解单一责任原则
- 27. 单一责任原则和知识库
- 28. PetClinic例子破单个责任原则
- 29. 使用“单一职责原则”迫使我的容器有公共设置器
- 30. 正在调用其他代码(SOLID)单一责任原则(SRP)违规?
如果该单一责任需要它实现多个接口,则不是。 – oldrinb 2012-08-07 23:05:41