設計模式七大原則之里氏替換原則

里氏替換原則:所有引用基類的地方,必須能透明的使用其子類的對象。

      通俗的理解:子類可以擴展父類的功能,但不能改變父類原有的功能。

代碼示例:

 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     }

           里氏替換原則表明,在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立,如果一個軟件實體使用的是一個子類對象的話,那麼它不一定能過使用基類對象。

例如:我喜歡動物,那我一定喜歡狗,以爲狗是動物的子類,但是我喜歡狗,不能推斷我喜歡任何動物,包括貓,老鼠,雖然它們也是動物。

           里氏替換原則是實現開閉原則的重要方式之一,由於使用基類對象的地方都可以使用子類對象,因此在程序中儘量使用基類類型來對對象進行定義,而在運行時再確定其子類類型,用子類對象來替換父類對象

            在運行里氏替換原則時,應該將父類設計爲抽象類或者接口,讓子類繼承父類或實現父類,並實現在父類中聲明的方法,運行時,子類實例替換父類實例,可以很方便地擴展系統的功能,無須修改原有子類的代碼,增加新的功能可以通過增加一個新的子類來實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章