适配器模式将某个类的接口转化成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容问题,约摸有一种亡羊补牢的感觉。主要分三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
一、类的适配器模式
1、创建原始类
public class Source {
public void method1(){
System.out.println("Source的method1方法");
}
}
2、创建接口,目的就是为了兼容原始类
public interface Target{
public void method1();
punlic void method2();
}
3、实现接口
public class Adapter extends Source implements Target{
@Override
public void method2(){
System.out.println("Adapter的method2的方法");
}
}
4、编写测试类,查看详情
public class Test{
public static void main(String[] args){
Target target = new Adapter();
target.method1();
target.method2();
}
}
5、运行后打印结果
Source的method1方法
Adapter的method2方法
由此可以看出,Target接口的实现类 Adapter 具有了 Source 类的功能,可以说Adapter对Source做了适配。
二、对象的适配器模式
基本思路和类的适配器模式相同,只是将Adapter类做修改,此次不再继承Source类,而是持有Source类的实例,以达到兼容性的问题。
1、以上步骤省略,直接从创建Target实现类开始
public class Adapter implements Target {
private Source source;
public Adapter(Source source) {
this.source = source;
}
@Override
public void method1() {
source.method1();
}
@Override
public void method2() {
System.out.println("Adapter的method方法");
}
}
2、测试类如下
public class Test {
public static void main(String[] args){
Source source=new Source();
Target target=new Adapter(source);
target.method1();
target.method2();
}
}
3、结果如下
Source的method1方法
Adapter的method2方法
三、接口的适配器模式
有时,我们一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显是比较浪费的。因为并不是所有的方法都是我们需要的,有时可能只需要一两个。为了解决这个问题,我们引入接口的适配器模式,借助一个抽象类,该抽象类实现了该接口的所有的方法,而不和我们原始的接口打交道,只和抽象类之间有联系。所有我们需要一个类,继承该抽象类,重写我们需要的方法就可以了。
1、创建抽象类 Wraaper 来实现 Target 接口
public abstract class Wraaper implements Target{
@OVerride
public void method1(){
}
@Override
public void method2(){
}
}
2、创建继承类
public class S1 extends Wraaper{
@Override
public void method1(){
System.out.println("S1 的 method1");
}
}
public class S2 extends Wraaper{
@Override
public void method2(){
System.out.println("S2 的 method2");
}
}
3、创建测试类
public class Test {
public static void main(String[] args){
S1 ss=new S1();
S2 sm=new S2();
ss.method1();
ss.method2();
sm.method1();
sm.method2();
}
}
适配器模式相对来说比较简单,当项目升级时用到的可能性还是比较大的,故在此一记。。。