首页 > 代码库 > 结构型模式:适配器模式
结构型模式:适配器模式
我们可能遇到过这样的问题:我们新买了一个显示器,但是由于电脑是几年以前的,不能直接连上使用,需要在连接的时候,安装一个转接头。
还有,我们使用的手机充电线有一个大大的头,而不是直接一根线连在手机上,手机上的充电电压一般是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类之后,就没有办法集成其他类,因此建议使用组合的适配器模式。
结构型模式:适配器模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。