面向接口编程就是将对象中的某个功能提取出来作为接口,而功能的具体实现则交由继承自这个接口的实现类处理。
面向接口的好处是降低程序的耦合性,当有新的功能时只需要对新功能进行编写,不需要修改已有的代码
下面是一个简单的范例:
假设作为父类的鸭子类Duck具有飞行的功能,继承自它的两个子类大鸭子BigDuck飞得快,小鸭子LittleDuck飞的慢,通过面向接口的方式进行实现
1 //父类 2 public class Duck{ 3 protected IFlyBehaviour flyBehaviour; 4 public void DuckFly() { 5 flyBehaviour.Fly(); 6 } 7 } 8 9 //继承Duck的子类 10 public class LittleDuck : Duck { 11 public LittleDuck() { 12 flyBehaviour = new NoFly(); 13 } 14 } 15 16 //继承Duck的子类 17 public class BigDuck : Duck 18 { 19 public BigDuck() 20 { 21 flyBehaviour = new QuickFly(); 22 } 23 } 24 25 //表示飞这一功能的接口,并没有实现 26 public interface IFlyBehaviour 27 { 28 void Fly(); 29 } 30 31 //具体实现飞行为的类,继承了接口 32 public class QuickFly : IFlyBehaviour 33 { 34 public void Fly() 35 { 36 Console.WriteLine("飞行速度非常快"); 37 } 38 } 39 40 //具体实现飞行为的类,继承了接口 41 public class NoFly : IFlyBehaviour 42 { 43 public void Fly() 44 { 45 Console.WriteLine("飞行速度非常慢"); 46 } 47 }
执行:
1 BigDuck bigDuck = new BigDuck(); 2 bigDuck.DuckFly(); 3 4 LittleDuck littleDuck = new LittleDuck(); 5 littleDuck.DuckFly();
结果:
1 飞行速度非常快 2 飞行速度非常慢