1.五大原则
我们在学习面向可维护性的构造技术时,学习了面向对象设计的五大原则,掌握这些原则能帮助我们更好的理解面向对象的概念,也能更好的理解设计模式。
2.SRP 单一责任原则
不应该有多于1个原因让你的ADT发生变化,否则就拆分开。
单一职责原则的优点:
- 类的复杂性降低,实现什么职责都有明确的定义;
- 逻辑变得简单,类的可读性提高了,而且,因为逻辑简单,代码的可维护性也提高了;
- 变更的风险降低,因为只会在单一的类中的修改。
3.OCP 开放-封闭原则
分为两部分。
- 对扩展性的开放:模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化。
- 对修改的封闭:模块自身的代码是不应被修改的,扩展模块行为的一般途径是修改模块的内部实现,如果一个模块不能被修改,那么它通常被认为是具有固定的行为。
4.LSP Liskov替换原则
子类型必须能够替换其基类型,派生类必须能够通过其基类的接口使用,客户端无需了解二者之间的差异。
简单概括:只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何异常。 但是反过来就不行了,因为子类可以扩展父类没有的功能,同时子类还不能改变父类原有的功能。
具体来说:
- 子类型可以增加方法,但不可删除。
- 子类型需要实现抽象类型中的所有未实现方法。
- 子类型中重写的方法必须有相同或子类型的返回值或者符合co-variance的参数。
- 子类型中重写的方法必须使用同样类型的参数或者符合contra-variance的参数。
- 子类型中重写的方法不能抛出额外的异常。
5.ISP 接口隔离原则
不能强迫客户端依赖于它们不需要的接口:只提供必需的接口。
意思就是客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,这就需要对接口进行细化,保证接口的纯洁性。换成另一种说法就是,类间的依赖关系应该建立在最小的接口上,也就是建立单一的接口。
6.DIP 依赖转置原则
抽象的模块不应依赖于具体的模块,具体应依赖于抽象。
在Java语言中,抽象就是指接口或抽象类,两者都不能被实例化;而细节就是实现接口或继承抽象类产生的类,也就是可以被实例化的实现类。依赖倒置原则是指模块间的依赖是通过抽象来发生的,实现类之间不发生直接的依赖关系,其依赖关系是通过接口是来实现的,这就是俗称的面向接口编程。