Java设计模式之适配器模式

发表于:2017-3-01 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ToCodeHeart    来源:51Testing软件测试网采编

  适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。
  适配器模式有两种:类适配器和对象适配器
  二者在实现上有些许区别,作用一样。
  1、类适配器模式:
  原理:通过继承来实现适配器功能。
  当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。
  详见下方实例:我们以ps2与usb的转接为例
  ps2接口:Ps2
  1 public interface Ps2 {
  2     void isPs2();
  3 }
  USB接口:Usb
  1 public interface Usb {
  2     void isUsb();
  3 }
  USB接口实现类:Usber
  1 public class Usber implements Usb {
  2
  3     @Override
  4     public void isUsb() {
  5         System.out.println("USB口");
  6     }
  7
  8 }
  适配器:Adapter
  1 public class Adapter extends Usber implements Ps2 {
  2
  3     @Override
  4     public void isPs2() {
  5         isUsb();
  6     }
  7
  8 }
  测试方法:Clienter
  1 public class Clienter {
  2
  3     public static void main(String[] args) {
  4         Ps2 p = new Adapter();
  5         p.isPs2();
  6     }
  7
  8 }
  显示结果:
  USB口
  实例讲解:
  我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。
  接口Ps2:描述ps2接口格式
  接口Usb:描述USB接口格式
  类Usber:是接口Usb的实现类,是具体的USB接口格式
  Adapter:用于将ps2接口格式转换成为USB接口格式
  2、对象适配器模式
  原理:通过组合来实现适配器功能。
  当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后在适配器P中定义私有变量C(对象)(B接口指向变量名),再定义一个带参数的构造器用来为对象C赋值,再在A接口的方法实现中使用对象C调用其来源于B接口的方法。
  详见下方实例:我们仍然以ps2与usb的转接为例
  ps2接口:Ps2
  1 public interface Ps2 {
  2     void isPs2();
  3 }
  USB接口:Usb
  1 public interface Usb {
  2     void isUsb();
  3 }
  USB接口实现类:Usber
  1 public class Usber implements Usb {
  2
  3     @Override
  4     public void isUsb() {
  5         System.out.println("USB口");
  6     }
  7
  8 }
  适配器:Adapter
  1 public class Adapter implements Ps2 {
  2
  3     private Usb usb;
  4     public Adapter(Usb usb){
  5         this.usb = usb;
  6     }
  7     @Override
  8     public void isPs2() {
  9         usb.isUsb();
  10     }
  11
  12 }
  测试类:Clienter
  1 public class Clienter {
  2
  3     public static void main(String[] args) {
  4         Ps2 p = new Adapter(new Usber());
  5         p.isPs2();
  6     }
  7
  8 }
  结果显示:
  USB口
  实例讲解:
  我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。
  接口Ps2:描述ps2接口格式
  接口Usb:描述USB接口格式
  类Usber:是接口Usb的实现类,是具体的USB接口格式
  Adapter:用于将ps2接口格式转换成为USB接口格式
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号