设计模式有六大原则,可以用SOLID这几个英文单词来记忆。原则体现了面向对象开发的基本思路。
单一职责原则
一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因
开闭原则
抽象约束
- 通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;
- 参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;(针对抽象编程)
- 抽象层尽量保持稳定,一旦确定即不允许修改。
- 元数据控制模块行为
通俗来说就是通过配置文件来操作数据,spring的控制反转就是一个很典型的例子。 - 约定优于配置
- 封装变化
- 将相同的变化封装到一个接口或者类中
- 将不同的变化封装到不同的类或者接口中(单一职责的体现)
里氏替换原则
传递参数使用基类对象,针对抽象编程,从而满足开闭原则。
接口隔离原则
每个接口都应只承担一种相对独立的角色,不干不该干的事情
依赖倒转原则
细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
开闭原则是我们要实现的目标,而里氏替换原则是实现手段之一,而同时里氏替换原则又是依赖倒转原则实现的基础
合成复用原则(Composite Reuse Principle, CRP)
尽量使用对象组合,而不是继承来达到复用的目的
继承会让系统更加复杂,最重要的一点会破坏系统的封装性,因为继承会把基类的实现细节暴露给子类,同时如果基类变化,子类也必须跟着改变,而且耦合度会很高。