shangxijie

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

求同存异,这是我对接口的看法。同者,抽象的部分,所有子类共同拥有的行为;异者,子类的的特色,子类特别拥有的行为。针对抽象编程,其实就是一个对对象抽象的过程,尽量将对象的共同点都抽象出来,形成抽象类或者接口,在以后引用的过程中,可以用抽象的去引用实现的。特别在一个类要有多种行为时,用抽象的去引用实现的就方便很多,不只是节省代码量,同时更重要的一点是所谓的复用,因为是针对抽象编程,用户根本没必要在乎子类如何去实现,只要实现了接口就可以调用。如果针对实现编程,那么在需求变化的时候,因为是针对实现编程,每个对象的类型都是实实在在的类,需求变化了,那么这个类肯定是需要变化的,这也违反了开放封闭原则,更要命的是,如果这个类承担了不同对象的相似行为,那么重复的代码就有很多,这个类写出来肯定非常难看。“编程不只是一门技术,同时更是一门艺术”,良好的代码能使开发者有一种成就感,也能自我激励。

鉴于本人文字功底极差,以上写的可能非常模糊,下面我用例子来说明。

主人家现在养了几种宠物,包括: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();

}

}

 

 

 

posted on 2008-07-25 11:54  尚希杰  阅读(228)  评论(0编辑  收藏  举报