面向对象的五大基本原则深入理解

五大基本原则

里氏替换原则

  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. 接口隔离原则

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

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

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

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

原文地址:https://www.cnblogs.com/thetree/p/13605576.html