写在前面的话
为什么会有这样一篇文章呢?还得从几天之前一次写代码说起。
当时在做一个功能,主要是根据事件类型EventType进行不同的事件处理,大致流程如下
- 提供一个接口,里面有个参数EventType,表示不同的请求类型
- 需要根据类型做不同的处理,比如是新增,修改,删除
然后就提笔写代码,主要类图如下
- 设计一个处理的接口,处理方法为process()
- 有一个抽象的父类,里面实现process(),并且做成final的模板方法;并且有几个抽象的protected方法,由子类实现
- 有几个处理的子类,继承父类,实现抽象方法
一通操作下来,觉得没什么毛病啊,满足功能不说,又有扩展,又有设计模式在里面,而且其它人也这么干。。。
但是,注意这个"但是",突然想到,这样用继承到底好不好呢,又说不上来。
再一个就是想起一个朋友说的,支面试的时候,技术总监问他,知不知道迪米特法则,他当时没回答上来(好在跟总监以前认识,还是顺利入职了,所以认识人还是很重要,手动笑)。后来我还专门去查了下,就是关于抽象的。
基于以上2个原因,于是就又专门去看了下软件设计的6大原则
设计模式
以前也有过2篇跟设计模式有关的文章,传送门:模板方法,适配器模式,有兴趣可以看一看,主要是参考Head First系列的《设计模式》。
这本书买了有好几年了,断断续续看过一些,一直不是很成体系。里面穿插介绍了软件设计的原则,以前都没引起重视,所以还是要多读书,多读几遍,同一本书,不同的人理解不一样,层次不一样的人理解也不一样
6大原则
设计模式六大原则(1):单一职责
定义:一个类应该只有一个引起变化的原因。
设计模式六大原则(2):里氏替换原则
定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
定义2:所有引用基类的地方必须能透明地使用其子类的对象。
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
设计模式六大原则(5):迪米特法则
定义:一个对象应该对其他对象保持最少的了解。又叫"最少知识"原则
设计模式六大原则(6):开闭原则
定义:类应该对扩展开放,对修改关闭
贴一个写的比较好的博客
算是引流把:软件设计模式六大原则