1. SRP单一职责原则
任何一个软件模块都应该有且仅有一个被修改的原因。
反例是一个类的三个方法给三个部门提供服务,而这三个方法有一些公共子方法,很有可能因为A部门的代码变更改动,导致B、C部门调用的方法出现意料之外的结果。
2. OCP开闭原则
设计良好的计算机软件应该易于扩展,同时抗拒修改。其主要目标是让系统易于扩展,同时限制其每次被修改所影响的范围。
3. LSP里氏替换原则
所有引用基类的地方必须能透明地使用其子类的对象。简单地说:所有父类能出现的地方,子类就可以出现,并且替换了也不会出现任何错误。这就要求子类的所有相同方法,都必须遵循父类的约定,否则当父类替换为子类时就会出错。LSP
重点强调:对使用者来说,能够使用父类的地方,一定可以使用其子类,并且预期结果是一致的。
4. ISP接口隔离原则
不同的操作隔离成接口,任何层次的软件设计如果依赖了他并不需要的东西,都会带来依赖之外的麻烦,ISP 提倡不要将一个大而全的接口扔给使用者,而是将每个使用者关注的接口进行隔离。
5. DIP依赖反转原则
如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用抽象类型,而非具体实现,从依赖具体实现转向到依赖抽象接口。从下图中我们可以看到实际调用方向和接口的实现与注入实例的方向是相反的。