学习设计模式 - 六大基本原则之单一职责原则
设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Principle),L-里氏替换原则(Liskov Substitution Principle),L-迪米特法则(Law of Demeter),I-接口隔离原则(Interface Segregation Principle),D-依赖倒置原则(Dependence Invension Principle)。
S-单一职责原则(Single Responsibility Principle)
一、定义
应该有且仅有一个原因引起类的变更。(There should never be more than one reason for a class to change.)
二、理解
一个接口或类只有一个职责,它只负责干一件事,也就是只有一个原因引起它的变化。单一职责原则提出了一个编写代码的标准,用"职责"或"变化原因"来判断一个接口或类是否设计优良,但"职责"和“变化原因”都是不可度量的,因项目而异,因环境而异。
如上,图1-1的IUserInfo接口包含了多个职责,职责不分明,所以可拆分成用负责户属性和负责用户行为两个职责。职责分离,当有一天需要修改负责用户属性这个职责时,并不用担心影响到用户行为这个职责,这就是单一职责的好处。
三、优缺点
优点:
1. 单一职责,复杂性降低
2. 可读性提高
3. 可维护性提高
4. 变更的风险降低,如果一个接口的单一职责做的好,修改接口只对相应的实现类有影响,对其他接口无影响,这对系统的
扩展性和维护性都有非常大的帮助
缺点:
暂无
四、 注意事项
单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。
对于接口,我们在设计的时候一定要做到单一,但是对于实现类就需要多方面考虑了。生搬硬套单一职责原则会引起类的剧增,给维护带来非常多的麻烦,而且过分细分类的职责,会认为的增加系统的复杂性。本来一个类可以实现的行为硬要拆分成两个类,然后再使用聚合或组合的方式耦合再一起,人为制造了系统的复杂性。
建议:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。
学习资料:
《设计模式之禅》秦小波 著