Java适配器模式_动力节点Java学院整理

作者:zy 时间:2021-09-06 10:50:53 

一.概念

适配器模式将一个接口转换成客户希望的另外一个接口。它使得原来由于接口不兼容而不能在一起工作的那些类可以一起工作。

二.UML

Java适配器模式_动力节点Java学院整理 

三.更加生动的例子

Java适配器模式_动力节点Java学院整理

Java适配器模式_动力节点Java学院整理

四.实例分析

去年买了一个本本,另外给本本配了罗技G1光电套。坑爹的是,光电套的鼠标是USB接口,键盘是PS2接口,可我的本本却没有PS2接口啊。于是跑到市场,淘了一个转接器。

于是乎,我抽象了这么几个类。

Java适配器模式_动力节点Java学院整理

1.PS2Port(PS2接口)。

2.USBPort(USB接口)。

3.PS2ToUSB(对象适配器),将PS2接口装换成USB接口。

4.TestAdapter(测试类),客户端。

PS2Port  


package com.bjpowernode.adapter;

/**
* PS2接口,圆口
* @author eason
*
*/
public interface PS2Port {
 public void workWithPS2();
}

 USBPort


package com.bjpowernode.adapter;

/**
* USB接口,U口
* @author eason
*
*/
public interface USBPort {
 public void workWithUSB();
}

PS2ToUSB


package com.bjpowernode.adapter;

/**
* 对象适配器
* 将PS2接口装换成USB接口
* 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port
* @author eason
*
*/
public class PS2ToUSB implements USBPort{

private PS2Port ps2Port;

public PS2ToUSB(PS2Port ps2Port) {
   this.ps2Port = ps2Port;
 }

@Override
 public void workWithUSB() {
   System.out.println("转换的关键在这里,本来是");
   ps2Port.workWithPS2();
   System.out.println("经过你的转换,现在是USB工作中");
 }

}

TestAdapter


package com.bjpowernode.adapter;

/**
* 测试类
* client
* @author eason
*
*/
public class TestAdapter {

public static void main(String[] args) {
   //我现在有一个PS2接口
   PS2Port ps2Port = new PS2Port() {
     @Override
     public void workWithPS2() {
       System.out.println("PS2工作中");
     }
   };

//但是我需要的是一个USB接口啊,对我(client)来说,我只认识USB接口
   //经过PS2ToUSB的转换,PS2接口变成了USB接口
   USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port);

ps2ToUsbPort.workWithUSB();

}

}

五.对象的适配器和类的适配器

上述的适配器就是对象适配器。再看看类适配器。

Java适配器模式_动力节点Java学院整理

PS2ToUSB,只是简单模拟一下。因为java不允许多继承,所以java中没有类模式的代码,只有思想。


package com.bjpowernode.adapter;

/**
* 类适配器
* @author eason
*
*/
public class PS2ToUSB implements USBPort, PS2Port{

//重写workWithUSB,把工作交给workWithPS2
 @Override
 public void workWithUSB() {
   workWithPS2();
 }

}

差别就是:对象适配器实现了客户端想要的接口(USB),在内部有一个被适配对象(PS2)的引用,通过组合实现适配功能。类适配器实现了客户端想要的接口(USB)和被适配对象接口(PS2),通过继承来实现适配功能。

六.使用场景及使用感受

1.希望复用一些现存的类,但是接口又与复用环境要求不一致。

2.其实适配器模式有点无奈之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该考虑通过重构统一接口。

七.适配器模式与装饰者模式

它们都可以用来包装对象,本质区别在于

1.适配器模式:将一个接口转换成另外一个接口。

2.装饰者模式:不改变接口,只加入职责。

标签:Java,适配器模式
0
投稿

猜你喜欢

  • Java字节码中jvm实例用法

    2023-08-08 05:25:09
  • @ConfigurationProperties加载外部配置方式

    2023-11-09 01:14:32
  • Java 使用poi把数据库中数据导入Excel的解决方法

    2022-09-19 14:18:52
  • Java判断变量是否为空问题的方法总结

    2023-02-03 12:23:09
  • Idea打包springboot项目没有.original文件解决方案

    2022-07-12 20:06:08
  • 解决springboot配置logback-spring.xml不起作用问题

    2022-09-10 11:21:24
  • Activiti如何启动流程并使流程前进

    2023-11-18 18:38:51
  • java递归实现汉诺塔步骤介绍

    2022-03-03 09:44:17
  • IDEA教程创建SpringBoot前后端分离项目示例图解

    2022-06-30 02:41:10
  • 浅谈Synchronized和Lock的区别

    2023-10-26 04:28:33
  • JAVA基础之一些不为人知的那些秘密

    2023-11-29 07:49:29
  • Java实战之在线寄查快递系统的实现

    2023-08-10 21:52:23
  • 一文详解Java中流程控制语句

    2023-11-26 11:39:49
  • java Mail邮件接收工具类

    2022-04-24 14:17:17
  • Java实现一个顺序表的完整代码

    2023-09-21 01:00:59
  • mybatis-plus查询源码详解

    2023-02-02 11:58:02
  • Java中List使用stream流转成map的几种方式详解

    2022-07-31 21:46:12
  • mybatis源码解读之executor包懒加载功能 

    2022-09-17 00:28:05
  • Java超详细讲解设计模式中的命令模式

    2023-07-26 15:23:11
  • Java thread.isInterrupted() 返回值不确定结果分析解决

    2023-11-09 19:27:09
  • asp之家 软件编程 m.aspxhome.com