远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
    • 分布式一致性协议之Gossip协议
    • 分布式一致性协议之Paxos协议
    • 分布式一致性协议之Raft协议
    • 分布式一致性协议之Lease机制
    • 分布式系统设计策略之心跳检测
    • 分布式系统设计策略之高可用
    • 分布式系统设计策略之容错性
    • 分布式系统设计策略之负载均衡
    • 分布式架构服务调用
    • 分布式服务治理之服务协调
    • 分布式服务治理之服务削峰
    • 分布式服务治理之服务降级
    • 分布式服务治理之服务限流
    • 分布式服务治理之服务熔断
    • 分布式服务治理之服务链路追踪
    • 架构设计基本原则之开闭原则(OCP)
    • 架构设计基本原则之单一职责原则(SRP)
    • 架构设计基本原则之接口隔离原则(ISP)
    • 架构设计基本原则之里式替换原则(LSP)
      • 里式替换原则(LSP)
        • 里氏替换原则的定义
        • 里式替换的作用
        • 里氏替换原则的实现方法
    • 架构设计基本原则之依赖倒置原则(DIP)
    • 架构设计基本原则知识扩展
    • 分布式架构知识拓展与总结
  • 分布式框架

  • 后端开发
  • 分布式
terwer
2022-05-04
目录

架构设计基本原则之里式替换原则(LSP)

# 里式替换原则(LSP)

LSP , Liskov Substitution Principle , 里氏替换原则

# 里氏替换原则的定义

里式替换阐述了继承的原则,可描述为:子类可以扩展父类的功能,但是不能改变父类原有的功能。

https://zhuanlan.zhihu.com/p/268574641 (opens new window)

# 里式替换的作用

  1. 里式替换是实现开闭原则的重要方式之一。
  2. 克服了继承中重写父类造成的可复用性变差的特点。
  3. 他是总动作正确性的保证。类的扩展不会给系统带来新的错误,降低了代码出错的可能性。
  4. 加强程序的健壮性。提高了兼容性、可维护性和可获展性,降低了需求变更带来的风险。

# 里氏替换原则的实现方法

里式替换的定义总结:

  1. 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法

    image-20220415183112900

    /**
     * @name: C
     * @author: terwer
     * @date: 2022-04-15 18:27
     **/
    public class C {
        public int func(int p1, int p2) {
            return p1 + p2;
        }
    }
    
    /**
     * @name: C1
     * @author: terwer
     * @date: 2022-04-15 18:28
     **/
    public class C1 extends C {
        @Override
        public int func(int p1, int p2) {
            return p2 - p1;
        }
    }
    
    /**
     * @name: Client
     * @author: terwer
     * @date: 2022-04-15 18:28
     **/
    public class Client {
        public static void main(String[] args) {
            C c = new C1();
            int result = c.func(1, 2);
            System.out.println("1+2=" + result);
        }
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    运行结果:1+2=1

    image-20220415183403799

  2. 子类可以增加自己特有的方法

    image-20220415183752542

    /**
     * @name: C2
     * @author: terwer
     * @date: 2022-04-15 18:35
     **/
    public class C2 extends C {
        public int func2(int p1, int p2) {
            return p2 - p1;
        }
    }
    
    /**
     * @name: Client
     * @author: terwer
     * @date: 2022-04-15 18:28
     **/
    public class Client {
        public static void main(String[] args) {
            C2 c2 = new C2();
            int result1 = c2.func(1, 2);
            System.out.println("1+2=" + result1);
            int result2 = c2.func2(1, 2);
            System.out.println("2-1=" + result2);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    运行结果:

    1+2=3 2-1=1

    image-20220415183912878

编辑 (opens new window)
#arch#desgin#lsp
上次更新: 2023/02/13, 17:01:26
架构设计基本原则之接口隔离原则(ISP)
架构设计基本原则之依赖倒置原则(DIP)

← 架构设计基本原则之接口隔离原则(ISP) 架构设计基本原则之依赖倒置原则(DIP)→

最近更新
01
解决css部分border被圆角切掉之后圆角的边框消失问题
03-18
02
使用TypeScript开发一个自定义的Node-js前端开发脚手架
03-08
03
Github-Actions使用release-please实现自动发版
03-06
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式