首页 > 代码库 > 结构型模式:适配器模式

结构型模式:适配器模式

我们可能遇到过这样的问题:我们新买了一个显示器,但是由于电脑是几年以前的,不能直接连上使用,需要在连接的时候,安装一个转接头。

还有,我们使用的手机充电线有一个大大的头,而不是直接一根线连在手机上,手机上的充电电压一般是5v,9v等,但绝不是220v。

还有苹果的手机等等,很多时候都会遇到需要转接头的时候。

在我们软件开发的过程中,比如对某个产品升级,但是还是要兼容原来老的接口,可以使用一个新的类,他可以继承原来的老类也可以使用组合使用老类,保证原来的接口继续受到兼容。这就需要我们现在说的适配器模式。简单的理解,适配器就是一个转接头。

技术分享

这是适配模式的关系图。Adaptee类是被适配的类,Adapter2是适配器类,对类Adaptee进行一定的适配,使得Client类可以调用。假设Client是我们的手机,Adapter是手机充电线的变压器,Adaptee则是220v电流。经过Adapter的适配,Client可以使用220v的电来进行充电。看一下代码:

 1 public interface Target { 2     public void doHandle(); 3 } 4  5 Target的实现类Adapter 6 public class Adapter extends Adaptee implements Target{ 7  8     @Override 9     public void doHandle() {10         super.requst();11     }12 13 }14 15 public class Adaptee {16     public void requst() {17         System.out.println("执行了方法");18     }19 }20 21 public class Client {22     public void test(Target t){23         t.doHandle();24     }25     public static void main(String[] args) {26         Client c = new Client();27         Target t = new Adapter();28         c.test(t);29     }30 }

上面是使用继承来实现的,下面将Adapter类和Client类稍加修改,使用组合实现适配器模式:

 1 public class Adapter2 implements Target{ 2  3     Adaptee adaptee; 4      5     public Adapter2(Adaptee adaptee) { 6         super(); 7         this.adaptee = adaptee; 8     } 9     10     @Override11     public void doHandle() {12         adaptee.requst();13     }14 15 }16 17 public class Client2 {18     public void test(Target t){19         t.doHandle();20     }21     public static void main(String[] args) {22         Client2 c = new Client2();23         Adaptee adaptee = new Adaptee();24         Target t = new Adapter2(adaptee);25         c.test(t);26     }27 }

只改变了这两个类,其他类不需要改变。

因为java是单继承的,继承了Adaptee类之后,就没有办法集成其他类,因此建议使用组合的适配器模式。

 

结构型模式:适配器模式