定义:一个类应该有且仅有一个引起它变化的原因,否则该类应该被拆分。
职责:类变化的原因。(一个类中的功能发生改变时,就需要修改这个类内部的业务逻辑,从而使类发生了变化)
核心思想:控制类的颗粒度大小、将对象解耦、提高其内聚性。
颗粒度 = 颗粒 + 清晰度
颗粒度小表示更微观,注重细节;颗粒度大表示宏观、概括,更多的是抽象。
为什么需要单一职责原则:如果一个类中包含多个不同的职责,但其中一个职责的需求发生改变而使这个类发生变化时,有可能会导致其它原本正常运行的职责产生故障,也就是不同职责被耦合在了一起。
因此,如果一个类的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力。
而且,当客户端需要该对象的某一个职责时,不得不将其他不需要的职责包含进来,从而造成冗余代码(代码重复)或代码的浪费。
单一职责的优点:
1.降低类的复杂度。(一个类只负责一项职责)
2.提高类的可读性。(复杂度低了,可读性自然就提高了)
3.提高系统的可维护性。(可读性提高了,系统就更容易维护了)
4.变更引起的风险降低。(当修改一个功能时,只会改变当前类,显著降低对其它功能的影响)
实现方法:将不同职责分离,再封装到不同的类中。
案例及分析:一个班级中有很多方面的事物需要处理,全部的工作都交给老师会使老师负担太重,所以班级内选出了班委(班长、学习委员、团支书等)。我们可以定义一个班委接口(接口中定义执行工作的抽象方法)和各个职位对应的类,然后让这些类实现班委接口,重写工作方法,各自执行各自的职责。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}