总原则 开放封闭原则(Open Close Principle)
- 定义:对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
- 概括: 程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。
- 优点:便于对程序进行维护,提高模块的复用性
一.单一职责原则(Single-Responsibility Principle)(高内聚)
定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因而不是随便一个类的修改都要牵连到它。
概括: 一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中。
-
优点:
- 提高程序的可读性
- 降低类的复杂度每个类各司其职(高内聚)
- 可维护性高,风险低。如果接口的单一职责好,一个接口修改只对应相应的实现类有影响。对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
二.里氏替换原则(Liskov Substitution Principle)
- 定义:子类型必须能够替换它们的基类型。一个软件实体如果使用的是一个基类,那么当把这个基类替换成继承该基类的子类,程序的行为不会发生任何变化。软件实体察觉不出基类对象和子类对象的区别。
- 概括: 子类可以在软件实体毫无察觉的替换父类
- 补充:
1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2.子类中可以增加自己特有的方法。
3.当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松。
4.当子类的方法实现父类的方法时(重写/重载或实现抽象方法)方法的后置条件(即方法的输出/返回值)要比父类更严格或相等。
- 优点:对继承进行约束,开放封闭原则的一种体现,低耦合
三.依赖倒置原则 (Dependence Inversion Principle)
- 定义:要依赖于抽象,而不是依赖于具体。
- 补充:针对接口编程,不要针对实现编程。
-
优点: 降低类之间的耦合性,提高程序的可读性和系统的可维护性。
依赖倒置.png
四.接口隔离原则(Interface Segregation Principle)
- 定义:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。
- 优点:符合高内聚低耦合的思想
- 和单一职责的区别:
1.单一职责原则面向的细节,强调的是某个类应该做同一类事情
2.接口隔离原则面向的是抽象,约束了类之间的依赖
五.迪米特原则
- 定义: 每个类应该保持对其他类的最少了解。这样可以避免改动某处地方却牵连到许多类
- 补充:减低类之间的耦合。