附-七大软件设计原则

该文章部分图片来自:慕课网《java设计模式精讲 Debug 方式+内存分析》

七大原则:

开闭原则、依赖倒置原则、单一职责原则

接口隔离原则、迪米特法则、里式替换原则、组合复用原则

 

附-七大软件设计原则

附-七大软件设计原则

 

附-七大软件设计原则

 

 

附-七大软件设计原则

 

注:

1.高层底层不是UML图中类的高低,而是指在类似于MVC架构中的Service(高),DAO(低)这种

2.通过抽象构建出来的架构一般要比通过细节构建出来的架构要稳定

 

附-七大软件设计原则

附-七大软件设计原则

注:

1.这个接口实现了两个大的功能,获取课程信息和课程操作

2.这个接口中存在的问题是:如果课程被退掉之后,就不能够获取课程信息了,因此拆分开来

 

附-七大软件设计原则

就是说一个接口中方法过多,还能够进一步地细化。这个接口就还能够细化

附-七大软件设计原则

在拆分之后

附-七大软件设计原则

这儿就实现了接口间隔离,因为粗粒度是不可拆分的,而细粒度是可以组装的,这就拥有更高的灵活性

 

注:

单一职责和接口隔离原则的区别:

单一职责原则是指类、接口、方法的职责是单一的,强调的是职责,在一个接口中不管有多少方法,只要是同一个职责,那么都是OK的,主要约束的是程序实现细节

接口隔离原则更注重的是接口方法的隔离,主要约束的是框架结构

 

附-七大软件设计原则

有的时候一个方法放在a类也行,放在b类也行,那么放在哪儿更好呢?

如果一个方法放在某一个类中,既不增加类间关系,也对本类不产生负面影响,那就可以放到本类中

附-七大软件设计原则

总的来说就是引用的类在能够完成对应功能的条件下越少越好

 

附-七大软件设计原则

 

附-七大软件设计原则

注意这儿是重载,而不是重写(Override)!!!因为如果重载的方法入参更严格的话,就会违反里式替换原则,子类不能替换父类,因为程序逻辑发生改变

比如父类中的入参是HashMap,那么当重写这个方法时,子类的入参应当是Map

附-七大软件设计原则

比如父类有一个返回值为Map的抽象方法,那么子类重写的时候返回值可能需要时HashMap

在日常使用中,确实直接重写父类方法来实现相应功能非常简单,但是在使用多态比较频繁的时候会增加系统出错的风险

 

即前宽后严:

入参更宽松

返回更严格(或相等)

附-七大软件设计原则

 

 

 

附-七大软件设计原则

比如在适配器模式中,在选择类适配器和对象适配器的时候,优先选择对象适配器

附-七大软件设计原则

聚合的关系强度更低,组合的关系强度更高

附-七大软件设计原则

附-七大软件设计原则