设计模式通常遵守以下原则。
单一职责原则
- 一个类只负责一项职责;
里氏替换原则
子类可以扩展父类的功能,但不能改变父类原有的功能。
- 子类可以实现父类的方法,但是不能覆盖父类的非抽象方法;
- 子类可以增加自己特有的方法;
- 子类的方法重载父类方法时,方法的形参要比父类的方法的输入更宽松;
- 子类的方法在实现父类的抽象方法时,方法的返回值要比父类更严格;
依赖倒置原则
- 高层模块不应该因爱低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
- 问题:A依赖类B,现在改为A依赖接口C,则必须通过修改类A的代码来实现。类A一般为高层模块,负责复杂的业务逻辑,类B和C是底层模块,负责基本的原子操作,假设修改类A,会带来不必要的风险;
- 解决:将A修改为依赖接口I,类B和类C各自实现接口I;
接口隔离原则
- 客户端不应该依赖他不需要的接口;
- 一个类对另一个类的依赖应该建立在最小的接口上;
- 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类C必须去实现他们不需要的方法;
- 解决:将臃肿的接口I分拆为独立的几个接口;
迪米特法则
- 一个对象应该对其他对象保持最少的了解;
开闭原则
- 对扩展开放,对修改关闭;
- 理论上来说就是在扩展代码的过程中,不要对原有的旧代码引入错误;