zoukankan      html  css  js  c++  java
  • 面向对象的五大基本原则深入理解

    五大基本原则

    里氏替换原则

    1. 单一职责原则

      核心思想为:一个类,最好只做一件事,只有一个引起它的变化。

      例如:将计算器抽象为类,将运算数值和运算方法抽象为状态和行为(即属性和方法)。

      public class JiSuanQi {
          int a;
          int b;
      
      	//有参构造
          public JiSuanQi(int a, int b) {
              this.a = a;
              this.b = b;
          }
      
          //加法
          public int add(int a, int b) {
              return a + b;
          }
      
          //减法
          public int sub(int a, int b) {
              return a - b;
          }
      }
      

      但这种写法却没有很好的按照单一职责的原则去构建,计算器不仅有加法、减法,还有乘法、除法,倘若后续要加上乘法、除法,那就要在原来的类中进行改动,添加这两个方法,但如果按照单一职责原则,一个类专注做一件事,对上一个类进行拆分,例如:

      加法类AddJiSuanQi

      public class AddJiSuanQi extends JiSuanQi{
          public AddJiSuanQi(int a, int b) {
              super(a, b);
          }
          //加法
          public int AddJiSuanQi(int a, int b) {
              return a+b;
          }
      }
      

      减法类SubJiSuanQi

      public class SubJiSuanQi extends JiSuanQi{
          public SubJiSuanQi(int a, int b) {
              super(a, b);
          }
          //减法
          public int SubJiSuanQi(int a, int b) {
              return a-b;
          }
      }
      

      通过将加法、减法分别抽象成单一的类,如果后续还要加乘法、除法功能,只需再新添这两个类,而不需要在原有类中进行改动。

      总结:通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。

    2. 开放封闭原则

      核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭。

      总结:“需求总是变化”没有不变的软件,所以就需要用封闭开放原则来封闭变化满足需求,同时还能保持软件内部的封装体系稳定,不被需求的变化影响。

    3. 里氏替换原则

      核心思想是:子类对象能够替换父类对象,而程序逻辑不变。

      总结:里氏替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。

    4. 依赖倒置原则

      其核心思想是:依赖于抽象。

      将耦合紧密的两个模块进行分离接口和实现,主要依赖于接口编程。

      总结:依赖于抽象,就是对接口编程,不要对实现编程。

    5. 接口隔离原则

      核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。

      使用臃肿的接口,会造成实现类实现接口的所有方法,不管是它需要的还是不需要的,造成接口污染。

      接口污染是指把接口做的过于“胖”,派生类必须实现某些它用不到的功能,这样不仅加大了接口间的耦合,而且带来不必要的复杂性,造成接口污染。

      总结:遵守接口隔离原则,将“胖”接口拆分为独立的几个接口,各实现类分别与需要的接口类来建立依赖关系。

  • 相关阅读:
    后台执行linux命令
    日志
    配置文件
    后台
    后台代码注释
    递归建立文件夹
    图片合成
    java.awt.Font
    java-日期取特定值
    linux乱码
  • 原文地址:https://www.cnblogs.com/thetree/p/13605576.html
Copyright © 2011-2022 走看看