1.一个类具有什么职责,应该是站在他人的角度或者说是使用者的角度来定义。职责不是一件事,而是许多和职责相关的事组成的。
例如:一个快递员,除了送快递,还需要做分包、收款。那么快递员的职责是和快递相关的一系列的事。快递员不能说我还可以有做饭。作为快递员的使用者,只希望你能处理好他的快递,并不会希望你还会做饭。那么如果快递员类中还有做饭的方法,那么这个类的职责就不单一了。所以,单一职责可以看作:一个类只负责一组相关的事情。
2.SPR原则主要是用来指导基础类的设计,并不适用于指导设计聚合类,聚合类本身就是违反单一职责原则的。
例如:办公一体机,有打印、复印、扫描、传真4个功能。这四个从职责上是完全不同的四个,但并不符合SPR原则。那我们要不要设计办公一体机类?肯定是要设计的,但是不能用SPR原则来约束。而是应该根据4个职责,分别设计4个基础类,然后去聚合成一个办公一体机聚合类。设计模式中的概念即“优先使用组合,而不是继承”。