设计模式--单一职责

单一职责原则(Single Responsibility Principle),简称SRP

单一职责原则定义:应该有且仅有一个原因引起类的变更,即一个接口或是类只有一个职责,它就负责一件事情。

先来看一个糟糕的设计

可以看到IPhone这个接口有两个职责,一个是协议管理,一个是数据传送。dial()和hangup()两个方法实现的是协议管理,而chat()实现的是数据传送。如果是这样设计的话,当协议变化或者是数据传送的变化,都会影响到这个接口,那么就增加了程序的风险,显然不是一种好的设计。这个时候,我们就看到单一职责的好处了,我们可以把这个接口拆成两个接口,让一个接口负责协议管理,另一个接口负责数据传送,这样当一个职责发生变化时,就不会影响到另一个增加了程序的健壮性。来看一下改进之后的类图:


一个类实现了两个接口,把两个职责融合在一个类中。虽然Phone这个类有两个职责,但是我们是面向接口编程,对外公布的是接口而不是实现类。单一职责不仅适用于接口和类,同样适用于方法,即一个方法尽量做一件事情。


小结:

单一职责比较难实现,因为“职责”没有一个量化的标准,到底一个类负责哪些职责?职责怎么细化?这些都要从实际出发,不能生搬硬套原则,原则是死的,就像毛爷爷当年在中国应用马克思主义一样,不能生搬硬套,要在我们现实情况的基础上去应用原则。

对于单一职责原则,作者的建议是:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...