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 飞行速度非常快

 

posted @ 2018-07-05 22:37  鱼剑浆糊  阅读(3588)  评论(0编辑  收藏  举报