熟练掌握和应用面向对象设计七大原则,是初中级工程师向高级/资深工程师进阶的一个必备技能。他可以大大的提升程序的可复用性和可维护性是重构代码的一大利器。

本人菜鸟一枚本面文章的出发点是1.加深个人印象。2.作为笔记记录。3.分享。文章中有描述的不到位或者不正确的地方各位大佬多多指出多多包涵。

使用设计模式的根本原因是适应变化,提升代码的复用率,扩展性,维护性和可读性。在设计时需要遵守以下七大原则:

⑴ 单一职责原则

⑵ 开放封闭原则

⑶ 依赖倒置原则

⑷ 里氏替换原则

⑸ 接口隔离原则

⑹ 组合复用原则

⑺ 迪米特原则

里氏替换原则

指的是子类必须更够替换掉父类,在开发过程中,子类替换掉父类之后,程序能够正常运行并且结果正确,行为正确。只有当子类替换掉父类之后,此时程序功能不受影响,父类才能够真正的被复用,而子类此时就可以在父类的基础上添加新的行为。

子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除了添加新的方法完成新增功能外,尽量不要重写父类的方法。

    class Program{static void Main(string[] agrs){Dog redDog = new RedDog();Dog yellowDog = new YellowDog();Console.WriteLine("redDog:" + redDog.typeStr);Console.WriteLine("yellowDog:" + yellowDog.typeStr);Console.Read();}}class Dog{public string typeStr{get{return "基类";}}}class RedDog : Dog{public string typeStr{get{return "派生类RedDog";}}}class YellowDog : Dog{public string typeStr{get{return "派生类RedDog";}}}

运行结果如下:

从上面的运行结果可以看出来,本来为RedDog和YellowDog类最后输出的竟然是父类的结果,这样一来就违背了里氏替换原则,必须保证只有当子类替换掉父类之后程序能够正常运行并且结果正确,行为正确。 修改代码如下:

    class Program{static void Main(string[] agrs){IDog redDog = new RedDog();IDog yellowDog = new YellowDog();Console.WriteLine("redDog:" + redDog.typeStr);Console.WriteLine("yellowDog:" + yellowDog.typeStr);Console.Read();}}interface IDog{string typeStr { get; }}class RedDog : IDog{public string typeStr => "派生类RedDog";}class YellowDog : IDog{public string typeStr => "派生类RedDog";}

运行结果如下:

我们可以使用继承接口的形式实现,父类替换掉子类后不能影响其子类的行为。还有一种情况是继承类的时候,代码如下:

    class Program{static void Main(string[] agrs){RedDog redDog = new RedDog();YellowDog yellowDog = new YellowDog();Console.WriteLine("redDogName:" + redDog.dogName);Console.WriteLine("yellowDog:" + yellowDog.dogName);Console.WriteLine("redDog:" + redDog.typeStr);Console.WriteLine("yellowDog:" + yellowDog.typeStr);Console.Read();}}class Dog{public string typeStr { get { return "基类Dog"; } }}class RedDog : Dog{public string dogName => "派生类RedDog";}class YellowDog : Dog{public string dogName => "派生类YellowDog";}

运行结果如下:

可以看的出来子类既包含了父类,又完成了功能的扩展符合里氏替换原则。

面向对象七大设计原则之里氏替换原则相关推荐

  1. 七大设计原则之里氏替换原则应用

    目录 1 里氏替换原则 2 里氏替换原则应用 1 里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)是指如果对每一个类型为 T1 的对象 o1,都有类型为 ...

  2. 软件设计原则之里氏替换原则、依赖倒置原则

    系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.里氏替换原则 什么是里氏 ...

  3. 6大设计原则之里氏替换原则

    面对对象中的继承 优点如下: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性 提高代码的重用性 子类可以形如父类,但又异于父类 提高代码的可扩展性,很多开源框架的扩展接口都是通过继承父类 ...

  4. 深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle ). 英文原文:http ...

  5. 【转】深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle ). 英文原文:http ...

  6. 开闭原则与里氏替换原则

    1.开闭原则 是面向对象设计的基本原则之一,是"可复用设计"的基础,它的主要原则是:对扩展开放,对修改关闭:意思就是我们改变一个软件时.应该通过扩展方式来改变软件,而不是修改原有的 ...

  7. python里氏替换原则_设计模式六大原则之里氏替换原则

    这是设计模式6 大原则系列的第二篇文章,附上前一篇文章地址:设计模式六大原则之单一职责原则.本文主要讲解设计模式的里氏替换原则. 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其 ...

  8. 深入理解开闭原则、里氏替换原则

    开闭原则(Open-Closed Principle)里氏替换原则 开闭原则(Open-Closed Principle) What 什么是开闭原则? Why 为什么要使用开闭原则和When 什么时候 ...

  9. 里氏替换原则_春辉带你了解面相对象设计第二原则(里氏替换原则)

    里氏替换原则的定义 里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的"面向对象 ...

最新文章

  1. 设计Optaplanner下实时规划服务的失败经历
  2. netapp 2个控制器spare盘分配
  3. B树、B+树其实很简单,看不懂你找我
  4. SQL基础【十七、uuid()、sys_guid()、newid()】
  5. 理解一个类里边设置两个同名函数
  6. Bailian4144 畜栏保留问题【贪心】
  7. 垃圾回收中的finalize方法
  8. VS调试按钮和运行按钮无法使用
  9. 暮光之城4下高清下载地址|暮光之城4第二部高清下载地址
  10. 开源| 直播推拉流2.0升级了什么
  11. ListView列表项View复用--ViewHolder模式
  12. 设计思维Design Thinking
  13. java如何爬取qq音乐_爬取QQ音乐
  14. 关闭微软cortana
  15. 牛客 数据库SQL实战 将所有获取奖金的员工当前的薪水增加10%
  16. Java微信开发_Exception_03_errcode:48001 errmsg:api unauthorized hint
  17. 程序的两种执行方式,静态语言和脚本语言
  18. 移动端H5页面开发遇到的问题和解决办法(一)
  19. zooomcharts的使用 (1.18.8版本 + ts )
  20. PhysX官方教程lession101

热门文章

  1. 20速碳纤维山地车千里达V1000评测
  2. 身体湿气重怎么办?游养乐分享2个祛湿小法宝
  3. mysql数据库的简单操作
  4. cmd 命令切换盘符
  5. 基于python的步态分析_基于Python的步态周期及三维肢体活动角度算法_2017108489397_说明书_专利查询_专利网_钻瓜专利网...
  6. 汇编语言及程序设计(51单片机)
  7. 【iOS】—— 分类、扩展和关联对象
  8. 算法的力量(转李开复)
  9. 单片机进制转换实现(报告+源码)
  10. 傅里叶变换到卷积定理