一个类只应承担一种责任。换句话说,让一个类只做一件事。如果需要承担更多的工作,那么分解这个类。
举例
订单和账单上都有流水号、业务时间等字段。如果只用一个类表达,赋予其双重职责,后果:
特有属性和共有属性相互掺杂,难以理解;
修改一个场景可能会影响另一个场景。
正确的做法是拆成两个独立的类。
单一职责原则某种程度上说是在分离关注点。分离不同角色的关注点,分离不同时间的关注点。
实体应该对扩展是开放的,对修改是封闭的。即,可扩展(extension),不可修改(modification)。
一个对象在其出现的任何地方,都可以用子类实例做替换,并且不会导致程序的错误。换句话说,当子类可以在任意地方替换基类且软件功能不受影响时,这种继承关系的建模才是合理的。
客户(client)不应被强迫依赖它不使用的方法。即,一个类实现的接口中,包含了它不需要的方法。将接口拆分成更小和更具体的接口,有助于解耦,从而更容易重构、更改。
高层次的模块不应依赖低层次的模块,他们都应该依赖于抽象。
抽象不应依赖于具体实现,具体实现应依赖抽象。
class Car {
Wheel wheel;
Car() {
wheel = new Wheel();
}
}
表明car依赖wheel,如果wheel的构造函数改变,则car也需要改动。
class Car {
Wheel wheel;
Car(Wheel wheel) {
wheel = wheel;
}
}
依赖注入,解决了wheel构造函数改变,Car也需要改动的问题
单一职责是所有设计原则的基础,开闭原则是设计的终极目标。里氏替换原则强调的是子类替换父类后程序运行时的正确性,它用来帮助实现开闭原则。而接口隔离原则用来帮助实现里氏替换原则,同时它也体现了单一职责。依赖倒置原则是过程式编程与OO编程的分水岭,同时它也被用来指导接口隔离原则
http://www.cnblogs.com/wuyuegb2312/p/7011708.html
https://insights.thoughtworks.cn/what-is-solid-principle/