话说有一个培训机构做了一个管理系统,里面有一个教师类,教师类中有讲课的方法。
实现教师类和其接口
Public interface Iteach{
Void teach ();
}
Public class Teacher implements Iteach {
void teach(){
System.out.println(“讲课”);
}
}
随着业务的发展该机构引进了一批外教,外教要用英文讲课,系统如何修改?Teacher类已经写好了,系统运行也很正常,如果贸然的修改这个类,说不定会带来潜在问题。
怎么解决?适配器模式登场:
一:实现新的英语外教类和其接口
Pulic interface IteachWithEnglish{
Void teachWithEnglish();
}
Public class EnglishTeacher implements IteachWithEnglish {
Void teachWithEnglish (){
System.out.println(“用英语讲课”);
}
}
二:创建适配器类:
Public class AdapterTeacher extends EnglishTeacher implements Iteach{
Void teach(){
Super.teachWithEnglish();
}
}
关键就在于这个适配器类,这个类需要继承英语外教类,并实现教师类的接口Iteach.
在实现接口的teach方法时实际上调用的是英语外教类的相关方法。
当要用到教师类的时候:
以前:
Public void main(String[] args){
Iteach t1 = new Teahcer();
t1.teach();
}
现在使用适配器类:
Public void main(String[] args){
Iteach t2 = new AdapterTeacher ();
t2.teach();
}
可以看到,只需要修改一个地方 由原来的 Teacher修改成AdapterTeacher,做到了最小修改。
适配器模式的定义:
来看一下适配器模式的定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。
这个例子中我们把EnglishTeacher 类的接口IteachWithEnglish接口变成了Teacher实现的接口Iteach,从而使需要使用Teacher类的地方都可以用适配器AdapterTeacher来代替,这就是适配器模式。
再举一个生活中的例子:笔记本电脑的usb接口只能插入usb接口的设备,现在我想把非usb接口的网线插进去怎么办呢?可以用一个适配器,看图: