单一职责原则 Single Responsibility Principle

应该有且仅有一个原因引起类的变更.

There should never be more than one reason for a class to change。

单一职责适用于接口,类,甚至是方法.

但对于类来说,往往又很难说.

因为受限于实际情况的多种因素影响,往往并不能保证类的单一职责.

接口的单一职责举例:

一个电话接口,定义电话的功能

dial拨号,chat通话,answer回应,hangeup挂断.

从特别的角度看,这个接口包含两种职责,一个是协议管理,即拨号与挂断,一个是数据传输,通话与回应.

可以修改为下图

但这种方式又增加了类的耦合度,phone类需要由ConnectionManager和DataTransfer组合而成.

而上图这种方式,一个类实现两种接口则是我们通常采用的方式.

此种方式明显更加完美,实现了接口职责的分割,又避免了组合类增加的耦合度.

方法的单一职责举例:

 这个方法根据type的不同,将可变参数changeOptions的值修改到userBO上.

看着好像挺方便,一个方法解决了很多问题,但此方法职责不清晰,不单一.需要大量的配套说明来解释.

而下图的的方法设计则简单明了,职责清晰,利于别人使用,并且也使维护的成本降低.

猜你喜欢

转载自www.cnblogs.com/zyh186/p/9186029.html