适配器模式
参考
1.简介
适配器模式(Adapter Pattern) ,是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能
常见的几类适配器
类的适配器模式 想将?个类转换成满?另?个新接?的类时,可以使?类的适配器模式,创建?个新类,继承原有的类,实现新的接?即可对象的适配器模式 想将?个对象转换成满?另?个新接?的对象时,可以创建?个适配器类,持有原类的?个实例,在适配器类的?法中,调?实例的?法就?接?的适配器模式 不想实现?个接?中所有的?法时,可以创建? 个Adapter,实现所有?法,在写别的类的时候,继承Adapter类即可
JDK中的InputStreamReader就是适配器。
2.接口的适配器
定义一个手机接口
public interface Phone {
void call();
void vedio();
}
现在想要写一个实现类,但是这个实现类只想实现call()方法 (假设老年机),这时我们就可以定义一个适配器去实现Phone接口,然后定义一个类直接继承适配器然后重写call()方法即可。
适配器
public class PhoneAdapter implements Phone {
@Override
public void call() {
}
@Override
public void vedio() {
}
}
继承适配器
public class NokiaPhone extends PhoneAdapter {
@Override
public void call() {
System.out.println("诺基亚手机打电话");
}
}
3.类的适配器
想要将一个类装换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可 。
代码实现
假设我们再升级或者优化一个项目时,需要将老的模块中的相关功能进行升级扩展,这个功能目前是由模块中的某个类OldModule类进行实现
public class OldModule {
public void methodA(){
System.out.println("OldModule 中的 methodA...");
}
}
那么我们如何在不改动老模块中OldModule类的前提下,对其所负责的业务功能进行扩展升级呢?
接下来,我们先将要扩展升级的相关功能方法,包括现有功能的方法在目标接口TargetModule中进行定义
public interface TargetModule {
public void methodA();
public void methodB();
public void methodC();
}
然后通过类的适配器,进行适配OldModule和TargetModule,这样就可以做到将?个类转换成满?另?个新接?的类,且不改动原有类
public class Adapter extends OldModule implements TargetModule{
@Override
public void methodB() {
System.out.println("Adapter 中的 methodB...");
}
@Override
public void methodC() {
System.out.println("Adapter 中的 methodC...");
}
}
测试
@Test
public void testClassAdapater(){
TargetModule targetModule = new Adapter();
targetModule.methodA();
targetModule.methodB();
targetModule.methodC();
}
|