单一功能原则 在面向对象编程领域中单一功能原则Single responsibility principle规定每个类都应该有一个单一的功能并且该功能应该由这个类完全封装起来所有它的这个类的服务都应该严密的和该功能平行功能平行意味着没有依赖 这个术语由罗伯特C马丁Robert Cecil Martin在他的敏捷软件开发原则模式和实践一书中的一篇名为面向对象设计原则的文章中给出 马丁表述该原则是基于的结构化分析和系统规格一书中的内聚原则Cohesion上 马丁把功能职责定义为改变的原因并且总结出一个类或者模块应该有且只有一个改变的原因如果你能够想到多于一个的动机去改变一个类那么这个类就具有多于一个的职责一个具体的例子就是想象有一个用于编辑和打印报表的模块这样的一个模块存在两个改变的原因第一报表的内容可以改变编辑第二报表的格式可以改变打印这两方面的改变会因为完全不同的起因而发生一个是本质的修改一个是表面的修改单一功能原则认为这两方面的问题事实上是两个分离的功能因此他们应该分离在不同的类或者模块里把有不同的改变原因的事物耦合在一起的设计是糟糕的 保持一个类专注于单一功能点上的一个重要的原因是它会使得类更加的健壮继续上面的例子如果有一个对于报表编辑流程的修改那么将存在极大的危险性因为假设这两个功能存在于同一个类中修改报表的编辑流程会导致公共状态或者依赖关系的改变打印功能的代码会因此不工作