设计模式学习之——六大设计准则之一:单一职责原则

设计模式学习之——六大设计原则之一:单一职责原则
    周末出去参加了一趟婚礼,趁着酒店休息时间以及路上时间,抽空看了下《设计模式之禅》这本书,讲解还是相当到位的,让我这种小白也能初窥大概,趁机做了下笔记。在之后几篇文章中应该都能体现出来。
    嗯 顺便说一下:kindle 真是个好东西,拿着趁手,晚上座公交车,司机不开灯也能看。而且看书随时随地,大赞大赞。大部头的书终于不用放进书包了!!!
    进入正题:
六大设计原则:
Single Responsibility Principle: 单一职责原则
Open Closed Principle: 开闭原则
Liskov Substitution Principle: 里氏替换原则
Law Of Demeter: 迪米特法则
Interface Segregation Principle: 接口隔离原则
Dependence Inversion Principle: 依赖倒置原则

单一职责原则:
定义:There should never be more than one reason for a class to change.
定义应该都能看懂,反正我这个大学四级都没过的都大概看懂了,哈哈
直接进入例子说明:
设计模式学习之——六大设计准则之一:单一职责原则
设计模式学习之——六大设计准则之一:单一职责原则
        电话类图:注:dial:拨通电话;chat:通话;hangup:挂电话

这么一个接口包含两个职责:协议管理(dial,hangup)和数据传送(chat)
这样看来,协议接通会引起这个接口或类的变化,数据传送也会引起这个接口或类的变化。
两个原因都引起了类的变化。但是!!这两个职责并不互相影响。所以说:拆分!!!
如下关系图(画图不好画啊,幸好有VS):
设计模式学习之——六大设计准则之一:单一职责原则
设计模式学习之——六大设计准则之一:单一职责原则

这么做,我们就实现了单一职责。但是这样会导致一个问题:该方式需要把ConnectionManager和DataTransfer组合在一起才能使用,组合是一种强耦合关系拥有共同生命期,而且增加了类的复杂性,多了两个类,不好不好。修改后如下:
设计模式学习之——六大设计准则之一:单一职责原则

设计模式学习之——六大设计准则之一:单一职责原则
完美:一个类实现两个接口,两个职责融合在了一个类中,虽然一个Phone有两个原因引起了变化,但是别忘记,我们是面向接口编程。公布的是接口而非实现类。

单一职责原则的优点:
a. 类的复杂性降低
b. 可读性提高
c. 可维护性提高
d. 变更引起的风险降低

注:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”衡量接口或类设计得是否优良,但这些都是不可度量的,所以,我们需要因项目而异,因环境而异

单一职责原则同样适用于方法:即一个方法尽可能做一件事。
对于单一职责原因:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。




笔记:阅读自《设计模式之禅》
欢迎转载,转载注明出处,谢谢
不过都是自己写的小笔记,很多地方自己都不是很懂