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

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

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

代码示例:

 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     }

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

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

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

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

原文地址:https://www.cnblogs.com/yangda/p/11924691.html