引入
在我们实际的开发中,接口需要定义很多抽象方法。按照传统的来讲,即便某些子类不需要实现接口中的某些方法,那么也不得不进行方法的覆写(这是因为java语法的要求)。我们来看一下传统的方法
代码说明
interface IBook {
public void read();
public void create();
public void message();
}
class MathBook implements IBook {
@Override
public void read() {
System.out.println("【MathBook子类】认真学习数学图书,巩固计算机的基础知识");
}
@Override
public void create() {
}
@Override
public void message() {
}
}
class ProgramBook implements IBook {
@Override
public void read() {
}
@Override
public void create() {
System.out.println("【ProgramBook 子类】根据编程图书上给的知识,创建属于自己的未来网络");
}
@Override
public void message() {
}
}
适配器
如果真的面对程序的编写,肯定希望直接命中主题,但是现在发现所有定义的子类不得不被需要无用的方法所拖累。即便不适用,也需要实现它,如果要是解决这个问题就需要找一个替代品,这个替代品负责实现接口中的所有方法,同时这替代品又不能够直接的使用,那么这种情况就是抽象类。
代码说明:
interface IBook {
public void read();
public void create();
public void message();
}
abstract class AbstractBookAdapter implements IBook {
public void read() {
}
public void create() {
}
public void message() {
}
}
class ProgramBookAbstract extends AbstractBookAdapter implements IBook {
@Override
public void create() {
System.out.println("【ProgramBook 子类】根据编程图书上给的知识,创建属于自己的未来网络");
}
}
这样的接口中,我们可以拥有一个非常灵活的空间
在以上程序中使用抽象类实现了程序的最终过度处理。这样就避免了子类要大面积覆写接口中抽象方法的尴尬局面。这样的设计在Java中属于适配器的设计模式。这种设计模式在整个类库中以及后续的学习中都是非常常见的功能。