已知一个类实现了某种功能,需要让这个类可以被接口可用。
可以通过对该类进行扩展,并实现统一接口,可以完成一个适配器模式。大部分的设计模式都是通过接口来表达,接口中的域字段默认是static和final的。
通过适配器模式,我们可以在任何现有类的基础上添加新的接口,所以这意味着让方法接受接口类型,是一种让任何类都可以对该方法进行适配的方式。如下EnglishTeacher本身只有teachEnglish方法,但是Nestty只接受IGeneralTeacher接口,为了让英语老师继续可以教课,可以通过增加适配器的方法进行原来类的复用。这就可以看到接口而不是类的强大之处。
//TODO demo
public class NesttyMain { IGeneralTeacher generalTeacher; interface IGeneralTeacher{ public void doTeach(); } static class EnglishTeacher{ public void teachEnglish(){ System.out.println("teach English"); } } static class AdaptedEnglishTeacher extends EnglishTeacher implements IGeneralTeacher{ public void doTeach() { teachEnglish(); } } NesttyMain(IGeneralTeacher generalTeacher){ this.generalTeacher = generalTeacher; } public static void main(String[] args){ NesttyMain nm = new NesttyMain(new AdaptedEnglishTeacher()); nm.generalTeacher.doTeach(); }}
基于设计模式来说,实现Runnable接口可以继承另外一个不同的类,而继承Thread则不可以。可以看到区别了吧?