日期:2014-05-20  浏览次数:20824 次

关于针对接口编程的优点
namespace ConsoleApplication1
{
  class Program
  {
  static void Main(string[] args)
  {
  //Animal _dog = new dog();
  //_dog.makeSound();
  dog _dog = new dog();
  _dog.makeSound();
  }
  }

  public interface Animal
  {
  void makeSound();
  }

  public class dog : Animal
  {
  public void makeSound()
  {
  brak();
  }

  void brak()
  {
  Console.Write("this is dog sound.");
  Console.Write("1");
  Console.Write("2");
  Console.Write("3");
  Console.Write("4");
  Console.Write("5");
  }
  }

  public class cat : Animal
  {
  public void makeSound()
  {
  meow();
  }

  void meow()
  {
  Console.Write("this is dog cat.");
  Console.Write("6");
  Console.Write("7");
  Console.Write("8");
  Console.Write("9");
  Console.Write("10");
  }
  }
}

去掉注释和不去掉注释到底区别在哪?请按此代码进行解释,谢谢。
在本例中,我怎么就看不到优点呢?

------解决方案--------------------
针对接口 这里的接口应该是针对这个animal吧 是父类 而不是interface 接口是广义的概念
------解决方案--------------------
面向接口编程,接口中只有方法声明,而没有具体实现,上面的Animal就相当与一个指针,具体可能指向dog,也可能指向cat,dog和cat就相当于具体的业务,当业务更改时,只需要更改一下指向就可以了,把Animal _dog = new dog();改成Animal _dog = new cat();就相当于更换了业务.这样后期的维护就会很方便,业务改变,重新写一个业务类,把指向更改一下,就行了,其他什么都不要改!
 

------解决方案--------------------
探讨
面向接口编程,接口中只有方法声明,而没有具体实现,上面的Animal就相当与一个指针,具体可能指向dog,也可能指向cat,dog和cat就相当于具体的业务,当业务更改时,只需要更改一下指向就可以了,把Animal _dog = new dog();改成Animal _dog = new cat();就相当于更换了业务.这样后期的维护就会很方便,业务改变,重新写一个业务类,把指向更改一下,就行了,其他什么都不要改!


------解决方案--------------------
面向组件编程的要义是在服务器与客户端之间定义契约,如你的例子中的Animal接口的makeSound()方法,
只要这个契约不变,服务器根据不同的类(如你的dog和cat)可有不同的实现,甚至同一个类可以发布不同
的版本,而客户端代码可不做改变。应该说面向组件编程与传统的面向对象编程是一大进步,但是它最大的缺
点是不能实现不同平台的互操作,所以又出现了面向服务编程。
------解决方案--------------------
作为接口的客户端,接口的使用者关心的是接口对外提供的能力,也就是公共方法,而不管具体是什么对象具有这种能力,而且这种通过接口进行的对象耦合比直接通过类型的耦合性要弱,也就是在将来可以更方便的扩展。
另外,面向接口的设计更容易进行单元测试,详情可以了解一下NMock