九、单一责任原则
一个类应该只有一个引起变化的原因
当我们允许一个类不但要完成自己的事情(管理某种聚合),还同时要担负更多责任(例如遍历)时,我们就给了这个类两个变化的原因。两个?没错,就是两个:如果这个集合改变的话,这个类也必须改变;如果我们遍历的方式改变的话,这个类也必须跟着改变。
单一责任原则的目标就是让类达到“高内聚性”(其实也就是类提供的方法是否符合类所在的抽象层次,依然是抽象问题)。
内聚(cohesion)是一个比单一责任更普遍的概念,但两者其实关系是很密切的。它用来度量一个类或模块紧密地达到单一目的或责任。
当一个模块或一个类被设计成只有一组相关的功能时,我们说它具有高内聚;反之,当被设计成支持一组不相关的功能时,我们说它具有低内聚。
遵守这个原则的类容易具有很高的凝聚力,而且比背负许多责任的低内聚类更容易维护。
翻译书 P339 倒数第二段说“如何解决呢?这个原则公司我们将一个责任只指派给一个类。”,我觉得这句话不合理,应该是“一个类只指派一个责任”。原文的漏洞在于:一个责任只指派给一个类,也就意味着一个类可以被指派多个责任(只要这些责任没有被指派给其他类)。
以上就是《深入浅出设计模式》一书中提到的九条设计原则,以及我对它们的理解和评注。
评论
发表评论