设计模式的原则:设计模式为什么这样做的依据
- 单一职责
- 一个类值负责一项职责
- 不一定是类级别的单一职责,也可以是方法级别来遵从单一职责
- 核心思想:降低类的复杂度
- 作用:
- 提高类的可读性与可维护性;
- 降低变更的风险;
- 只有代码足够简单,才能违反单一职责
- 接口隔离
- 当一个接口的很多实现类,它们需要实现该接口的所有方法,但是这些实现类的很多方法不会被使用,那么这些方法就没有任何意义了
- 这个时候,就有必要拆分接口了
- 最小接口:实现类的方法都会被使用的接口
- 定义:
- 依赖倒转
- 父类不能依赖子类,二者都应该依赖抽象(抽象类,接口)
- 抽象不应该依赖细节,细节应该依赖抽象
- 中心思想:面向接口编程
- 抽象的东西要稳定的多
- 具体使用:
- 在进行传参的时候,我们可以使用接口来定义传参,这样如果我们要新增差不多的其他类的时候,就不用专门新增方法,这样就简单很多了,我只需要让新的类来实现这个接口,然后传入就ok了
- 通过构造器来实现,放在类中。这种用法其实挺多的
- 通过setter实现(这个和构造器差不多,没啥区别)
- 里式替换
- 使用继承时,尽量不要重写父类的方法
- 你重写了,继承父类干什么,有什么意义?
- 如果迫不得已需要重写,可以通过聚合,组合,依赖等,让这个类上升,和父类共同继承一个base类,将方法抽取
- 你重写了,就不透明了,不知道你的执行逻辑了,而且和父类不一样,这就很尴尬。。可能会用错
- 开闭原则
- 对扩展开放(提供方),对修改关闭(使用方)
- 用抽象构建框架,用实现扩展细节
- 当需要变化时,通过扩展,而不是修改
- 迪米特
- 直接朋友:出现在成员变量,方法参数,方法返回值的类是直接朋友;而局部变量的类不是直接的朋友,是陌生类
- 使用方对被使用方竟可能少的了解,尽量把被使用方的细节给放到被使用方内部去
- 尽量少对直接朋友进行操作,将这些操作放到直接朋友里
- 合成复用
- 尽量使用合成/聚合的方式,而不是使用继承