Java适配器模式应用之电源适配器功能详解

 更新时间:2018年05月16日 10:19:52   作者:chengqiuming  
这篇文章主要介绍了Java适配器模式应用之电源适配器功能,较为详细的分析了适配器模式的概念、原理及Java基于适配器模式实现电源适配器功能的相关操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Java适配器模式应用之电源适配器功能。分享给大家供大家参考,具体如下:

一、模式定义

存在两种适配器模式

1 对象适配器模式,在这种适配器模式中,适配器容纳一个它包裹的类对象的物理实体。

2 类适配器模式,在这种适配器模式中,适配器继承自已实现的类。

二、模式举例

1 模式分析

我们借用笔计本电源适配器来说明这一模式。

已经存在的交流电源
笔记本电脑
电源适配器

2 适配器模式的静态建模

3 代码举例

3.1 抽象电源建立

package com.demo.power;
/**
 * 电源基类
 *
 * @author
 *
 */
public abstract class AbsBasePower
{
  // 电压值
  private float power;
  // 单位
  private String unit = "V";
  // 构造方法
  public AbsBasePower(float power)
  {
    this.power = power;
  }
  public float getPower()
  {
    return power;
  }
  public void setPower(float power)
  {
    this.power = power;
  }
  public String getUnit()
  {
    return unit;
  }
  public void setUnit(String unit)
  {
    this.unit = unit;
  }
}

3.2 220v电源接口

package com.demo.power.v220;
/**
 * 220V 电源接口
 *
 * @author
 *
 */
public interface IPower220 {
  // 220V交流电源打印
  public void output220v();
}

3.3 220v电源实现类

package com.demo.power.v220;
import com.demo.power.AbsBasePower;
/**
 * 220V电源
 *
 * @author
 *
 */
public class Power220 extends AbsBasePower implements IPower220
{
  // 构造方法
  public Power220()
  {
    super(220);
  }
  // 220V电源输出
  public void output220v()
  {
    System.out.println("----这是[" + this.getPower() + this.getUnit() + "]电源!...");
  }
}

3.4 12v电源接口

package com.demo.power.v12;
/**
 * 12V 电源接口
 *
 * @author
 *
 */
public interface IPower12 {
  // 12V电源打印
  public void output12v();
}

3.5 12v电源实现类

package com.demo.power.v12;
import com.demo.power.AbsBasePower;
/**
 * 正常的12V电源
 *
 * @author
 *
 */
public class Power12 extends AbsBasePower implements IPower12 {
  // 12V电源构造方法
  public Power12() {
    super(12);
  }
  // 12V电源输出
  public void output12v() {
    System.out.println("----这是[" + this.getPower() + this.getUnit()
        + "]电源!...");
  }
}

3.6  12v电源对象适配器

package com.demo.adapter;
import com.demo.power.AbsBasePower;
import com.demo.power.v12.IPower12;
/**
 * 电源适配器 (实现目标对象接口 即:12V电源接口)
 *
 * @author
 *
 */
public class AdapterPower12 implements IPower12 {
  // 待转换的对象
  private final AbsBasePower absBasePower;
  // 适配器构造方法 将待转换对象传入
  public AdapterPower12(AbsBasePower absBasePower) {
    this.absBasePower = absBasePower;
  }
  // 实现目标对象方法
  public void output12v() {
    // 获得外部电源值
    float powerFloat = this.absBasePower.getPower();
    // 进行电源转换
    if (powerFloat == 380) {
      // 380V电源转换
      powerFloat = powerFloat / 31.67f;
    } else if (powerFloat == 220) {
      // 220V电源转换
      powerFloat = powerFloat / 18.33f;
    } else if (powerFloat == 110) {
      // 110V电源转换
      powerFloat = powerFloat / 9.17f;
    } else {
      System.out.println("----不能适配电源!...");
      return;
    }
    // 处理转换结果
    powerFloat = (int) (powerFloat * 10) / 10.0f;
    System.out.println("----这是[" + powerFloat + this.absBasePower.getUnit()
        + "]电源!...");
  }
}

3.7  12v电源类适配器

package com.demo.adapter;
import com.demo.power.AbsBasePower;
import com.demo.power.v12.IPower12;
/**
 * 电源适配器 (实现目标对象接口 即:12V电源接口) 类适配器 模式
 *
 * @author
 *
 */
public class AdapterPower12Ext extends AbsBasePower implements IPower12 {
  // 适配器构造方法 将待转换对象传入
  public AdapterPower12Ext(AbsBasePower absBasePower) {
    super(absBasePower.getPower());
  }
  // 实现目标对象方法
  @Override
  public void output12v() {
    // 获得外部电源值
    float powerFloat = this.getPower();
    // 进行电源转换
    if (powerFloat == 380) {
      // 380V电源转换
      powerFloat = powerFloat / 31.67f;
    } else if (powerFloat == 220) {
      // 220V电源转换
      powerFloat = powerFloat / 18.33f;
    } else if (powerFloat == 110) {
      // 110V电源转换
      powerFloat = powerFloat / 9.17f;
    } else {
      System.out.println("----不能适配电源!...");
      return;
    }
    // 处理转换结果
    powerFloat = (int) (powerFloat * 10) / 10.0f;
    System.out.println("----这是[" + powerFloat + this.getUnit() + "]电源!...");
  }
}

3.8  测试适配器

package com.demo;
import com.demo.adapter.AdapterPower12;
import com.demo.adapter.AdapterPower12Ext;
import com.demo.power.v12.IPower12;
import com.demo.power.v12.Power12;
import com.demo.power.v220.Power220;
/**
 * 客户端程序调用
 *
 * @author
 *
 */
public class Client {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // 我们首先 生成一个220V电源对象!
    Power220 power220 = new Power220();
    power220.output220v();
    // 接下来,我们在生成一个12V电源对象!
    IPower12 power12 = new Power12();
    power12.output12v();
    // 最后,我们使用电源适配器 将220V电源转换为12V电源!
    System.out.println("\n----电源适配器转换中...");
    IPower12 adapterPower12 = new AdapterPower12(power220);
    adapterPower12.output12v();
    System.out.println("----电源适配器转换结束!");
    // 类适配器实现
    System.out.println("\n----类适配器 电源适配器转换中...");
    IPower12 adapterPower12Ext = new AdapterPower12Ext(power220);
    adapterPower12Ext.output12v();
    System.out.println("----类适配器 电源适配器转换结束!");
  }
}

3.9 运行结果

----这是[220.0V]电源!...
----这是[12.0V]电源!...
----电源适配器转换中...
----这是[12.0V]电源!...
----电源适配器转换结束!
----类适配器 电源适配器转换中...
----这是[12.0V]电源!...
----类适配器 电源适配器转换结束!

三、设计原则

1使用对象组合,面向接口和抽象编程
2“开一闭”原则

四、使用场合

1 软件系统结构需要升级或扩展,又不想影响原有系统稳定运行的时候
2 转换类之间的差別不是很大的时候
3 想创建一个可以复用的类,该类可以与其他不相关类或不可预见类协同工作的时候

五、类适配器模式和对象适配器模式的静态类图

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java陷阱之慎用入参做返回值详解

    Java陷阱之慎用入参做返回值详解

    这篇文章主要给大家介绍了关于Java陷阱之慎用入参做返回值的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决Mybatis查询方法selectById()主键不一致问题

    解决Mybatis查询方法selectById()主键不一致问题

    这篇文章主要介绍了解决Mybatis查询方法selectById()主键不一致问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • SpringBoot利用MDC机制过滤单次请求的所有日志

    SpringBoot利用MDC机制过滤单次请求的所有日志

    在服务出现故障时,我们经常需要获取一次请求流程里的所有日志进行定位 ,如何将一次数据上报请求中包含的所有业务日志快速过滤出来,就是本文要介绍的,需要的朋友可以参考下
    2024-04-04
  • Java并发编程之JUC并发核心AQS同步队列原理剖析

    Java并发编程之JUC并发核心AQS同步队列原理剖析

    AbstractQueuedSynchronizer 简称 AQS,可能我们几乎不会直接去使用它,但它却是 JUC 的核心基础组件,支撑着 java 锁和同步器的实现,大神 Doug Lea 在设计 JUC 包时希望能够抽象一个基础且通用的组件以支撑上层模块的实现,AQS 应运而生
    2021-09-09
  • 学习Java之File文件操作方法

    学习Java之File文件操作方法

    这篇文章我们主要学习如何实现IO流的具体操作,但很多时候,IO流都会操作一个文件,所以我们需要先学习在Java中如何操作文件,包括文件及文件夹的创建、遍历、删除等,有了文件操作的基础,我们才能更好地操作IO流,文中有详细的代码示例,需要的朋友可以参考下
    2023-09-09
  • java 实现获取指定位置后的第一个数字

    java 实现获取指定位置后的第一个数字

    这篇文章主要介绍了java 实现获取指定位置后的第一个数字,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Springboot整合FreeMarker的实现示例

    Springboot整合FreeMarker的实现示例

    本文主要介绍了Springboot整合FreeMarker的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java中Iterator(迭代器)的用法详解

    Java中Iterator(迭代器)的用法详解

    Java迭代器(Iterator)是 Java 集合框架中的一种机制,它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法。本文主要介绍了它的使用方法,希望对大家有所帮助
    2023-05-05
  • 一个简单的Python名片管理系统

    一个简单的Python名片管理系统

    这篇文章主要为大家详细介绍了一个简单的Python名片管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • MyBatis Plus构建一个简单的项目的实现

    MyBatis Plus构建一个简单的项目的实现

    这篇文章主要介绍了MyBatis Plus构建一个简单的项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论