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程序设计有所帮助。

(0)

相关推荐

  • Java经典设计模式之适配器模式原理与用法详解

    本文实例讲述了Java经典设计模式之适配器模式.分享给大家供大家参考,具体如下: 适配器模式是把一个类的接口适配成用户所期待的,使得原本由于接口不兼容而不能一起工作的一些类可以在一起工作从而实现用户所期望的功能. 适配器模式的优势: 1. 通过适配器,客户端可以调用统一接口,操作简单直接,并且代码逻辑紧凑,使用起来方便. 2. 代码复用,适配器模式就是解决因为环境要求不相同 的问题,通过适配实现代码复用. 3. 将目标类和适配器类解耦,通过新建一个适配器类来重用现在的类,不用再去重复修改原有代码

  • Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比

    Java 适配器模式 最近学习java 基础知识,学习适配器的时候疑惑很多,上网查下资料,对于 Adapter的资料很多,但是比较下本篇不错,这里记录下,大家需要的可以看下. 适配器模式就是把一个类的接口转换成客户端所期待的另外一种接口,从而使原接口不匹配而无法在一起工作的的两个类能在一起工作.从功能上说,这些接口不兼容的类一般具有相同或相似的功能.通常我们通过修改该类的接口来解决这种接口不兼容的情形,但是如果我们不愿意为了一个应用而修改各原接口,或者我们压根儿就没有对象的源代码的时候,适配器模

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

    一.概念 适配器模式将一个接口转换成客户希望的另外一个接口.它使得原来由于接口不兼容而不能在一起工作的那些类可以一起工作. 二.UML 三.更加生动的例子 四.实例分析 去年买了一个本本,另外给本本配了罗技G1光电套.坑爹的是,光电套的鼠标是USB接口,键盘是PS2接口,可我的本本却没有PS2接口啊.于是跑到市场,淘了一个转接器. 于是乎,我抽象了这么几个类. 1.PS2Port(PS2接口). 2.USBPort(USB接口). 3.PS2ToUSB(对象适配器),将PS2接口装换成USB接口

  • java设计模式之适配器模式(Adapter)

    概述 将一个类的接口转换成用户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 两种实现方式 1.类的适配器模式: 2.对象的适配器模式: 类的适配器模式的UML图,如下: 类的适配器模式把适配的类的API转换成为目标类的API. 上图设计的角色有: 目标角色(Target):这就是所期待得到的接口. 源角色(Adapee):现在需要适配的接口. 适配器角色(Adapter):是本模式的核心,适配器把源接口转换成目标接口. 代码示例: inter

  • 详解Java适配器模式

    假期刚结束不久,也没什么好写的,今天就水下文章,讲讲设计模式对开发时的影响,做开发到现在,感觉设计模式对开发的影响还是挺大的. 这次就简单谈谈适配器模式.可能适配器模式感觉比较鸡肋,但是用到的地方还挺多的,特别是合作开发的时候. 1.适配器模式 适配器模式,作为连接两个接口的桥梁.这个概念感觉有点那啥,很少用接口的朋友可能就没有什么感觉,经常面向接口编程的朋友比较能产生共鸣,简单来说,就是写一个适配器(转换器)来对接对象. 2.适配器模式使用 java适配器模式有两种,类适配器和对象适配器 (1

  • java设计模式笔记之适配器模式

    适配器(Adapter)模式: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 生活中的场景: 1.笔记本电源适配器,可以将220v转化为适合笔记本使用的电压. 2.给笔记本电脑的usb接口插入台式机的ps/2接口的键盘,需要一个usb和ps/2的接口转接器,此时usb和ps/2的接口转接器就充当了适配器的角色. 通用类图: 在上面的通用类图中,Cient 类最终面对的是 Target 接口(或抽象类),它只能够使用符合这一

  • Java设计模式之Adapter适配器模式

    一.场景描述 "仪器数据采集器"包含采集数据以及发送数据给服务器两行为,则可定义"仪器数据采集器"接口,定义两方法"采集数据capture"和"发送数据sendData". "PDF文件数据采集器"实现时,要实现"仪器数据采集器"接口,实现"采集数据"方法:目前有"PDF文件内容解析工具"类PdfFileExtractor,该类实现PDF文件的数据

  • 23种设计模式(5) java适配器模式

    23种设计模式第五篇:java适配器模式 定义: 将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 角色: 目标(Target)角色:这就是所期待得到的接口,也就是这类的接口是符合我们要求的. 源(Adapee)角色:我们要使用的接口,但是这个接口不符合我们的要求,也就是现在需要适配的接口. 适配器(Adaper)角色:适配器类是适配器模式的核心.适配器把源接口转换成目标接口.显然,这一角色不可以是接口,而必须是具体类. 分类: 1

  • Java适配器模式定义与用法示例

    本文实例讲述了Java适配器模式定义与用法.分享给大家供大家参考,具体如下: 将一个类的接口转换成客户想要的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器一共包括3种角色 1.目标:目标是一个接口,该接口是客户想使用的接口 2.被适配者:被适配者是一个已存在的接口或抽象类,这个接口或抽象类需要适配 3.适配器:适配器是一个类,该类实现了目标接口并包含有被适配者的引用,即适配者的指着是对被适配者接口与目标进行适配 package org.zhy.adapte

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

    本文实例讲述了Java适配器模式应用之电源适配器功能.分享给大家供大家参考,具体如下: 一.模式定义 存在两种适配器模式 1 对象适配器模式,在这种适配器模式中,适配器容纳一个它包裹的类对象的物理实体. 2 类适配器模式,在这种适配器模式中,适配器继承自已实现的类. 二.模式举例 1 模式分析 我们借用笔计本电源适配器来说明这一模式. 已经存在的交流电源 笔记本电脑 电源适配器 2 适配器模式的静态建模 3 代码举例 3.1 抽象电源建立 package com.demo.power; /**

  • Java 自定义Spring框架与核心功能详解

    目录 Spring核心功能结构 核心容器 spring-beans和spring-core模块 spring-context模块 spring-context-support模块 spring-context-indexer模块 spring-expression模块 AOP和设备支持 数据访问与集成 Web组件 通信报文 集成测试 bean概述 在上一讲中,我们对Spring的基本使用进行了一个简单的回顾,接下来,我们就来看一下Spring核心功能结构. Spring核心功能结构 Spring

  • Java NIO实战之聊天室功能详解

    本文实例讲述了Java NIO实战之聊天室功能.分享给大家供大家参考,具体如下: 在工作之余花了两个星期看完了<Java NIO>,总体来说这本书把NIO写的很详细,没有过多的废话,讲的都是重点,只是翻译的中文版看的确实吃力,英文水平太低也没办法,总算也坚持看完了.<Java NIO>这本书的重点在于第四章讲解的"选择器",要理解透还是要反复琢磨推敲:愚钝的我花了大概3天的时间才将NIO的选择器机制理解透并能较熟练的运用,于是便写了这个聊天室程序. 下面直接上代

  • java(jsp)整合discuz同步登录功能详解

    最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块,正好在开源中国上看到了一个利用discuz的UCenter功能实现同步登录的开源项目(https://code.google.com/p/discuz-ucenter-api-for-java/),不禁大喜,于是花了几个小时照着教程操作了一遍,居然很轻松的成功了,特写此文以做纪念.. Uenter是Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,实现用户的一站

  • Java实现单向链表的基本功能详解

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单的入门-如果有错的地方请指正 二.回顾与知新 说起链表,我们先提一下数组吧,跟数组比较一下就很理解链表这种存储结构了. 2.1回顾数组 数组我们无论是C.Java都会学过: 数组是一种连续存储线性结构,元素类型相同,大小相等 数组的优点: 存取速度快 数组的缺点: 事先必须知道数组的长度 插入删除元

  • python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解

    python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能. python中: print("hello,world!") 输出结果为:hello,world! java中: System.out.print("hello,world!"); 输出结果为:hello,world! 我们可以看到,这两个函数的用法是一样的 print()函数还有这种用法: print("1+1=",1+1) 输出结

  • Java太阳系小游戏分析和源码详解

    最近看了面向对象的一些知识,然后跟着老师的讲解做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下最近学的知识: 用到知识点:类的继承.方法的重载与重写.多态.封装等 分析: 1.需要加载图片.画图 2.建一个面板,主页面 3.行星类 效果图: 先看一下源码结构图: 现在逐步分析各个类的功能: 1)工具类-----util包中 --Constant类   封装了游戏中用到的常量 --GameUtil类  封装了游戏的图片加载功能 --MyFrame类  封装了游戏面板的构造,用于各面板的父类 -

  • java中Executor,ExecutorService,ThreadPoolExecutor详解

    java中Executor,ExecutorService,ThreadPoolExecutor详解 1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thre

  • Socket+JDBC+IO实现Java文件上传下载器DEMO详解

    该demo实现的功能有: 1.用户注册: 注册时输入两次密码,若两次输入不一致,则注册失败,需要重新输入.若用户名被注册过,则提示用户重新输入用户名: 2.用户登录: 需要验证数据库中是否有对应的用户名和密码,若密码输错三次,则终止用户的登录操作: 3.文件上传: 从本地上传文件到文件数据库中 4.文件下载: 从数据库中下载文件到本地 5.文件更新: 根据id可更新数据库中的文件名 6.文件删除: 根据id删除数据库中某一个文件 7.看数据库所有文件; 8.查看文件(根据用户名); 9.查看文件

  • java 制作验证码并进行验证实例详解

    java 制作验证码并进行验证实例详解 在注册.登录的页面上经常会出现验证码,为了防止频繁的注册或登录行为.下面是我用java制作的一个验证码,供初学者参考,做完验证码之后,我们可以用ajax进行验证码验证. 功能一:验证码制作的代码,点击图片,验证码进行更换 /** * 显示验证码图片 */ public void showCheckCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, I

随机推荐