java 面向接口编程_轻松理解面向接口编程!

阿轩打算教儿童背古诗,用Java描述应该是这样:

class Child{//儿童

public void listen(){}//听课

public void recite(){}//朗读

}

class Teacher{//老师

public void teach(Child child){}//教课

}

/*这就是标准的面向对象编程,描述了对象间的关联。*/

后来业务熟练了,打算扩展服务对象,增加在校学生,代码就变成了这样:

class Child{//儿童

public void listen(){}//听课

public void recite(){}//朗读

}

class Student{//学生

public void listen(){}//听课

public void recite(){}//朗读

}

class Teacher{//老师

public void teach(Child child){}//教儿童背古诗

public void teach(Student student){}//教学生背古诗

}

/*这还是标准的面向对象编程,但是不具备扩展性*/

后来继续扩展服务对象,增加外国人,这下老师又要研究新的业务?不如一步到位,提前掌握更宽泛的技能,代码如下:

abstract class Person{//人

public abstract void listen();//听课

public abstract void recite();//朗读

}

class Child extends Person{//儿童

public void listen(){}//听课

public void recite(){}//朗读

}

class Student extends Person{//学生

public void listen(){}//听课

public void recite(){}//朗读

}

class Foreigner extends Person{//外国人

public void listen(){}//听课

public void recite(){}//朗读

}

class Teacher{//老师

public void teach(Person person){}//教人背古诗

}

/*这就对面向对象编程进行了更深入的应用,具备了一定的扩展性,称为面向基类编程,通常基类会被声明为抽象类,所以又称面向抽象类编程*/

按照以前的经验,估计业务又要扩展了,不过即使再出现新的服务对象类型,只要是人,阿轩都可以应付。但是这次又有问题了,新的服务对象又来了:鹦鹉,现有的技能不匹配了。如果继续加宽服务对象范围为动物,很多动物又没办法服务,那怎么称呼这些服务对象呢?算了,不管这些对象是什么,我只需要考虑他们能干什么就好了。于是代码变成了这样:

public interface ListenAndReciteAble{//能听会读的

void listen();//听课

void recite();//朗读

}

abstract class Person implements ListenAndReciteAble{//人

}

class Child extends Person{//儿童

public void listen(){}//听课

public void recite(){}//朗读

}

class Student extends Person{//学生

public void listen(){}//听课

public void recite(){}//朗读

}

class Foreigner extends Person{//外国人

public void listen(){}//听课

public void recite(){}//朗读

}

class Parrot implements ListenAndReciteAble{//鹦鹉

public void listen(){}//听课

public void recite(){}//朗读

}

class Teacher{//老师

public void teach(ListenAndReciteAble lar){}//教背古诗

}

/*要让一个依赖方达到最大的兼容性或扩展性,就要让依赖的对象类型尽量宽泛,当然Object是最宽泛的,但是这就不明确了,而且不能保证依赖方的需要。这是就要跳出一些定式,我需要什么的是什么?还是我需要的是他们会什么?这就变成了面向接口编程。*/

谢谢

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值