zoukankan      html  css  js  c++  java
  • 设计模式七大原则之里氏替换原则

    里氏替换原则:所有引用基类的地方,必须能透明的使用其子类的对象。

          通俗的理解:子类可以扩展父类的功能,但不能改变父类原有的功能。

    代码示例:

     1     //电脑
     2     public abstract class Computer
     3     {
     4         public abstract void Use();
     5     }
     6 
     7     /// <summary>
     8     /// 笔记本电脑
     9     /// </summary>
    10     class LaptopCommputer : Computer
    11     {
    12         public override void Use()
    13         {
    14             Console.WriteLine("当前正在使用笔记本电脑");
    15         }
    16     }
    17 
    18     /// <summary>
    19     /// 台式电脑
    20     /// </summary>
    21     class DesktopComputer : Computer
    22     {
    23         public override void Use()
    24         {
    25             Console.WriteLine("当前正在使用台式电脑");
    26         }
    27     }
    28     class Program
    29     {
    30         static void Main(string[] args)
    31         {
    32             //笔记本电脑
    33             Computer laptop = new LaptopCommputer();
    34             laptop.Use();
    35             //台式电脑
    36             Computer desktopComputer = new DesktopComputer();
    37             desktopComputer.Use();
    38 
    39             Console.ReadLine();
    40         }
    41     }

               里氏替换原则表明,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能过使用基类对象。

    例如:我喜欢动物,那我一定喜欢狗,以为狗是动物的子类,但是我喜欢狗,不能推断我喜欢任何动物,包括猫,老鼠,虽然它们也是动物。

               里氏替换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象

                在运行里氏替换原则时,应该将父类设计为抽象类或者接口,让子类继承父类或实现父类,并实现在父类中声明的方法,运行时,子类实例替换父类实例,可以很方便地扩展系统的功能,无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。

  • 相关阅读:
    Android总结之json解析(FastJson Gson 对比)
    Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统
    IOS遍历网页获取网页中<img>标签中的图片url
    IOS各种集合遍历效率对比
    cx_oracle访问处理oracle中文乱码问题
    使用tar解压文件提示gzip: stdin: not in gzip format错误
    Mac安装crfpp
    oracle 常用操作
    docker启动centos7后sudo不能使用
    常见Python爬虫工具总结
  • 原文地址:https://www.cnblogs.com/yangda/p/11924691.html
Copyright © 2011-2022 走看看