该文章部分图片来自:慕课网《java设计模式精讲 Debug 方式+内存分析》
七大原则:
开闭原则、依赖倒置原则、单一职责原则
接口隔离原则、迪米特法则、里式替换原则、组合复用原则
注:
1.高层底层不是UML图中类的高低,而是指在类似于MVC架构中的Service(高),DAO(低)这种
2.通过抽象构建出来的架构一般要比通过细节构建出来的架构要稳定
注:
1.这个接口实现了两个大的功能,获取课程信息和课程操作
2.这个接口中存在的问题是:如果课程被退掉之后,就不能够获取课程信息了,因此拆分开来
就是说一个接口中方法过多,还能够进一步地细化。这个接口就还能够细化
在拆分之后
这儿就实现了接口间隔离,因为粗粒度是不可拆分的,而细粒度是可以组装的,这就拥有更高的灵活性
注:
单一职责和接口隔离原则的区别:
单一职责原则是指类、接口、方法的职责是单一的,强调的是职责,在一个接口中不管有多少方法,只要是同一个职责,那么都是OK的,主要约束的是程序实现细节
接口隔离原则更注重的是接口方法的隔离,主要约束的是框架结构
有的时候一个方法放在a类也行,放在b类也行,那么放在哪儿更好呢?
如果一个方法放在某一个类中,既不增加类间关系,也对本类不产生负面影响,那就可以放到本类中
总的来说就是引用的类在能够完成对应功能的条件下越少越好
注意这儿是重载,而不是重写(Override)!!!因为如果重载的方法入参更严格的话,就会违反里式替换原则,子类不能替换父类,因为程序逻辑发生改变
比如父类中的入参是HashMap,那么当重写这个方法时,子类的入参应当是Map
比如父类有一个返回值为Map的抽象方法,那么子类重写的时候返回值可能需要时HashMap
在日常使用中,确实直接重写父类方法来实现相应功能非常简单,但是在使用多态比较频繁的时候会增加系统出错的风险
即前宽后严:
入参更宽松
返回更严格(或相等)
比如在适配器模式中,在选择类适配器和对象适配器的时候,优先选择对象适配器
聚合的关系强度更低,组合的关系强度更高