Java设计模式-软件设计原则-单一职责原则

岳庆锦

发布于 2022.03.07 21:47 阅读 1429 评论 0

单一职责原则(单一功能原则)

 定义:一个类应该有且仅有一个引起它变化的原因,否则该类应该被拆分。

 职责:类变化的原因。(一个类中的功能发生改变时,就需要修改这个类内部的业务逻辑,从而使类发生了变化)

 核心思想:控制类的颗粒度大小、将对象解耦、提高其内聚性。

 颗粒度 = 颗粒 + 清晰度

 颗粒度小表示更微观,注重细节;颗粒度大表示宏观、概括,更多的是抽象。

 为什么需要单一职责原则:如果一个类中包含多个不同的职责,但其中一个职责的需求发生改变而使这个类发生变化时,有可能会导致其它原本正常运行的职责产生故障,也就是不同职责被耦合在了一起。

 因此,如果一个类的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力。

 而且,当客户端需要该对象的某一个职责时,不得不将其他不需要的职责包含进来,从而造成冗余代码(代码重复)或代码的浪费。

 单一职责的优点

 1.降低类的复杂度。(一个类只负责一项职责)

 2.提高类的可读性。(复杂度低了,可读性自然就提高了)

 3.提高系统的可维护性。(可读性提高了,系统就更容易维护了)

 4.变更引起的风险降低。(当修改一个功能时,只会改变当前类,显著降低对其它功能的影响)

 实现方法:将不同职责分离,再封装到不同的类中。

 案例及分析:一个班级中有很多方面的事物需要处理,全部的工作都交给老师会使老师负担太重,所以班级内选出了班委(班长、学习委员、团支书等)。我们可以定义一个班委接口(接口中定义执行工作的抽象方法)和各个职位对应的类,然后让这些类实现班委接口,重写工作方法,各自执行各自的职责。