六大设计原则
1.单一职责原则(SRP)
《there should never be more than one reason for a class to change》:要求一个接口或类只有一个原因引起变化,也就是一个接口或类负责一件事情(一类事情)
好处:
- 类的复杂性减低,实现什么职责都有清晰明确的定义;
- 可读性提高,负责性降低,可读性提高,可维护性提高;
- 变更引起的风险减低,一个接口只对
坏处
- 类的数量剧增,维护麻烦
- 难以细分类的职责
- it is hard to see
2.里氏替换原则(LSP)
所有引用基类的方法必须能透明地使用其子类的对象
- 子类必须完全实现父类的方法
- 子类可以有自己的方法和属性
- 覆盖或实现父类的方法时输入参数可以被放大
- 覆盖或实现父类的方法时输出结果可以被缩小
3.依赖倒置原则(DIP)
- 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过抽象类或接口产生的
- 接口或抽象类不依赖与实现类
- 实现类依赖接口或抽象类
依赖的三种写法:
(1)构造函数传递依赖对象,构造函数注入
(2)setter方法传递依赖对象
(3)接口声明依赖对象
实现的规则
- 每个类尽量都有接口或抽象类,或者两者都具备、
- 任何类都不应该从具体类派生
- 变量的表面类型尽量是接口或抽象类
- 尽量不要覆写/重写基类的方法
- 结合里氏替换原则使用