美文网首页
设计模式七大原则 - 里氏替换原则

设计模式七大原则 - 里氏替换原则

作者: 夹板儿孩 | 来源:发表于2022-11-25 13:30 被阅读0次

里氏替换原则

案例:

假设 B 类中有一个 jia(int num1, int num2) 的方法,功能是将 num1 + num2 的计算结果算出。这时候 A 类继承了 B 类。使用者 C 类调用了 A 类中的 jia 方法,理论上应当得到的是加法结果。那么问题来了,如果 B 类继承 A 类后将 jia(int num1, int num2) 进行重写。那么 C 类的调用将无法得到正确的结果。

里氏替换原则:

  1. 在使用继承时,应当遵循里氏替换原则,在子类中尽量不要重写父类的方法
  2. 继承实际上会增强两个类的耦合性,在适当的情况下可以通过聚合、组合、依赖来解决问题

案例代码

public class B {
    public int jia(int num1, int num2) {
        return num1 + num2;
    }
    
    public void console(int num){
        System.out.println(num);
    }
}

public class A extends B {
    public int jia(int num1, int num2) {
        return num1 - num2;
    }
}

public class Main {
    public static void main(String[] args) {
        A a = new A();
        // 由于A类没有遵循里氏替换原则,重写了 jia 方法。使计算的结果变成了不正确的结果
        System.out.println(a.jia(1, 3)); // 调用者想得到 1+3 的结果,实际结果是 1-3
    }
}

console

-2

依里氏替换原则解决案例情况

思路:将不能被修改的代码向上抽取,将 A 和 B 进行解耦

案例思路代码

public class Base {
    public void console(int num){
        System.out.println(num);
    }
}

public class B extends Base{
    public int jia(int num1, int num2) {
        return num1 + num2;
    }
}

public class A extends Base {
    // 这里我们臆想为 jia 方法的作者命名不规范将减法方法命名为了加法方法
    public int jia(int num1, int num2) {
        return num1 - num2;
    }
}

public class Main {
    public static void main(String[] args) {
        A a = new A();
        // 由于A类没有遵循里氏替换原则,重写了 jia 方法。使计算的结果变成了不正确的结果
        a.console(a.jia(1, 3)); // 调用者想得到 1-3 的结果,实际结果是 1-3
        
        // 这时候如果我们还想使用加法方法,那么只需要将 B 方法进行实例化即可
        B b = new B();
        b.console(b.jia(1, 3));
    }
}

console

-2
4

相关文章

  • 设计模式之里氏替换原则

    设计模式之里氏替换原则 里氏替换原则(LSP: Liskov Substitution Principle) 定义...

  • 里氏替换原则

    个人博客原文:里氏替换原则 设计模式六大原则之二:里氏替换原则。 简介 姓名 :里氏替换原则 英文名 :Lisko...

  • 设计模式的设计原则

    设计模式的设计原则 面向对象五大设计原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 开闭原则 设计模...

  • 装饰器、简单工厂、工厂方法和抽象工厂模式

    设计模式的六大原则 单一职责原则(Single Responsibility Principle) 里氏替换原则(...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

  • 面向对象中七个的设计原则

    七大设计原则: 开闭原则单一职责原则里氏替换原则依赖倒置原则接口隔离原则最少知识原则(迪米特法则)少用继承多用组合...

  • 设计模式

    设计模式六大原则[设计模式六大原则(1):单一职责原则][设计模式六大原则(2):里氏替换原则][设计模式六大原则...

  • JAVA设计模式原则

    一、Solid原则 介绍设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置...

  • 1、面向对象的六大原则

    基于《Android源码设计模式解析与实战》 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪...

  • 读《设计模式之禅》(二)

    上次看了设计模式的6大设计原则,单一职责原则、开闭原则、迪米特法则、里氏替换原则、接口隔离原则、依赖倒置原则。这次...

网友评论

      本文标题:设计模式七大原则 - 里氏替换原则

      本文链接:https://www.haomeiwen.com/subject/nnqxfdtx.html