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