C# 面向接口編程


面向接口編程就是將對象中的某個功能提取出來作為接口,而功能的具體實現則交由繼承自這個接口的實現類處理。

面向接口的好處是降低程序的耦合性,當有新的功能時只需要對新功能進行編寫,不需要修改已有的代碼

 

下面是一個簡單的范例:

 1     //父類
 2     public class Duck
 3     {
 4         protected IFlyBehaviour flyBehaviour;
 5         //可以動態修改對象的某一功能的實現
 6         public void SetDuckFly(IFlyBehaviour fb)
 7         {
 8             flyBehaviour = fb;
 9         }
10         public void DuckFly()
11         {
12             flyBehaviour.Fly();
13         }
14     }
15 
16     //小鴨子類,繼承鴨子類
17     public class LittleDuck : Duck
18     {
19         public LittleDuck()
20         {
21             flyBehaviour = new SlowFly();
22         }
23     }
24 
25     //大鴨子類,繼承鴨子類
26     public class BigDuck : Duck
27     {
28         public BigDuck()
29         {
30             flyBehaviour = new QuickFly();
31         }
32     }
33 
34     //飛行為的接口,只定義了飛行的方法而未實現
35     public interface IFlyBehaviour
36     {
37         void Fly();
38     }
39 
40     //實現快速飛的行為類,繼承了飛行接口
41     public class QuickFly : IFlyBehaviour
42     {
43         public void Fly()
44         {
45             Console.WriteLine("飛行速度非常快");
46         }
47     }
48 
49     //實現慢速飛行的行為類,繼承了飛行接口
50     public class SlowFly : IFlyBehaviour
51     {
52         public void Fly()
53         {
54             Console.WriteLine("飛行速度非常慢");
55         }
56     }

假設作為父類的鴨子類Duck具有飛行的功能,繼承自它的兩個子類大鴨子BigDuck飛得快,小鴨子LittleDuck飛的慢,通過面向接口的方式進行實現,而通過父類Duck中的SetDuckFly()方法,我們還可以在程序運行過程中動態的去修改某一功能

 

執行:

1 BigDuck bigDuck = new BigDuck();
2 bigDuck.DuckFly();
3 
4 LittleDuck littleDuck = new LittleDuck();
5 littleDuck.DuckFly();
6 
7 littleDuck.SetDuckFly(new QuickFly());
8 littleDuck.DuckFly();

 

結果:

1 飛行速度非常快
2 飛行速度非常慢
3 飛行速度非常快

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM