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