求同存异,这是我对接口的看法。同者,抽象的部分,所有子类共同拥有的行为;异者,子类的的特色,子类特别拥有的行为。针对抽象编程,其实就是一个对对象抽象的过程,尽量将对象的共同点都抽象出来,形成抽象类或者接口,在以后引用的过程中,可以用抽象的去引用实现的。特别在一个类要有多种行为时,用抽象的去引用实现的就方便很多,不只是节省代码量,同时更重要的一点是所谓的复用,因为是针对抽象编程,用户根本没必要在乎子类如何去实现,只要实现了接口就可以调用。如果针对实现编程,那么在需求变化的时候,因为是针对实现编程,每个对象的类型都是实实在在的类,需求变化了,那么这个类肯定是需要变化的,这也违反了开放封闭原则,更要命的是,如果这个类承担了不同对象的相似行为,那么重复的代码就有很多,这个类写出来肯定非常难看。“编程不只是一门技术,同时更是一门艺术”,良好的代码能使开发者有一种成就感,也能自我激励。
鉴于本人文字功底极差,以上写的可能非常模糊,下面我用例子来说明。
主人家现在养了几种宠物,包括:dog,cat,他们都有叫的行为,实现一个makeSound的接口,主人有时候逗dog玩,有时候都cat玩
代码如下:
interface IAnimal
{
void makeSound();
}
Dog:IAnimal
{
public void makeSound()
{
messagebox.show("wowo");
}
}
Cat:IAnimal
{
public void makeSound()
{
messagebox.show("苗苗");
}
}
//主人类
Owner
{
private IAnimal animal;
public Owner(IAnimal animal)//针对抽象编程,如果参数换成Dog animal或Cat animal呢,程序很死板,后果很严重:
{ //违反开发封闭原则,不利于维护,如果主人喜新厌旧,不喜欢dog和cat,喜欢monkey了
this.animal= animal; //这个地方就要改动,多麻烦,工作多大啊,同时也不能复用。
}
private void makeSound()
{
this.animal.makeSound();
}
}