interface 这个关键字产生一个完全抽象的类, 它根本就没有提供任何具体实现。它允许创建者确定方法名、参数列表和返回类型, 但是没有任何方法体。接口只提供了形式, 而未提供任何具体实现。
1.有关接口的适配器模式
在介绍继承时,我们举过图形的栗子,对于向上转型的图形必须继承Shape类,合情合理。但假如我们创建一个新的类Line并没有继承Shape类,此时就不能使用Shape来进行操作方法,这就形成紧耦合。
接口可以极大地解决耦合过紧的问题。当Shape是一个接口时,图形circle、square等都实现该接口,同样可以基于多态来操作图形的方法。此时,当出现一个没有实现shape接口的图形Line类,我们可以通过适配器设计模式来解决该问题。
栗子:
class Line{
public void draw(){System.out.println("draw line!")}
public void erase(){System.out.println("erase line!")}
}
Line的适配器:
class LineAdapter implements Shape{
Line line;
public LineAdapter (Line line){
this.line=line;
}
public void draw(){ line.draw(); }
public void erase(){ line.erase(); }
}
测试:
class Test{
public static void main(String[] args){
Shape line = new LineAdapter (new Line());
line.draw();//draw line!
line.erase();//erase line!
}
}
通过这一系列操作,可以实现紧耦合到松耦合的转变,其实也不难。生活中,何尝不是如此,紧到松容易,松到紧何其困难。别想歪了,我说的是学习。(拷走!)
2.通过继承来扩展接口
Java语言中,单继承多实现早已耳熟能详。然而在一个类上实现很多接口(存在关系的)会显得特别臃肿,接下来就谈谈接口之间的继承
在开发和维护过程中,当产生多个由于开发顺序引起的存在关联的接口时,我们不需要修改原来的接口,而是在先接口的基础上继承原来的接口,来实现接口的扩展。当然,对于不同的接口继承时,避免出现相同的方法名。举个栗子:
interface Dog{
void eat();
void drink();
}
interface StupidDog extends Dog{
void destoryHome();
}
class Erha implements StupidDog{
public void eat(){System.out.println("emmmm");}
public void drink(){System.out.println("gulugulu");}
public void destoryHome(){System.out.println("This home too tidy");}
}
3.接口中存放常量
接口中可以存放常量,如下:
当然, 这些域不是接口的一部分, 它们的值被存储在该接口的静态存储区域内。
4.接口与工厂
接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂方法设计模式。这与直接调用构造器不同,我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。理论上,通过这种方式, 我们的代码将完全与接口的实现分离, 这就使得我们可以透明地将某个实现替换为另一个实现。下面的实例展示了工厂方法的结构:
public interface Factory {
public Shape getShape();
}
---
public class CircleFactory implements Factory {
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Circle();
}
}
---
public class Test {
public static void main(String[] args) {
Factory circlefactory = new CircleFactory();
Shape circle = circlefactory.getShape();
circle.draw();
}
}
5.小结
1)掌握接口的一般使用方法,对于未实现接口的类,为保证代码的完整性可以采用适配器设计模式来完成未实现接口类的向上转型,提高复用性。
2)接口之间可以继承
3)接口中存放静态常量
4)接口在工厂设计模式的应用