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 运行结果

三、设计原则

1使用对象组合,面向接口和抽象编程

2“开一闭”原则

四、使用场合

1 软件系统结构需要升级或扩展,又不想影响原有系统稳定运行的时候

2 转换类之间的差?e不是很大的时候

3 想创建一个可以复用的类,该类可以与其他不相关类或不可预见类协同工作的时候

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java.util接口_函数接口– Java 8中java.util.function包中的函数接口

java.util接口我以前写过有关功能接口及其用法的文章。 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consumer,Predicate和其他接口…

java new string作用_java中直接new String对象?

首先明确一点,在Java中比较的是两个对象的地址,equals()比较的是两个对象的值,如果使用equals()来替换,则两个输出结果都为true。言归正传,为什么第一个返回为false?先看一下intern()这个方法的描述&#x…

Apache Camel中的短重试与长重试

《骆驼设计模式》一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践。 每个模式都基于真实的用例,并提供了Camel特定的实现细节和最佳实践。 为了让您有这本书的感觉,以下是该书的重试模式摘录,其中介绍了如…

java注解的继承_Java注解合并,注解继承

spring中有时候一个类上面标记很多注解。实际上Java注解可以进行继承(也就是把多个注解合并成1个)比如说SpringMVC的注解RestControllerRequestMapping("/person")可以合并为一个PathRestController("/user")实现是:import java.lang.annotatio…

java实现驾校考试系统_jsp驾校考试系统

本驾校考试系统采用了Browser/Server体系结构,JSP(Java Server Page)作为前台开发工具,MySQL作为后台数据库进行开发。最终系统实现的系统将分为管理员和学员两个角色,其中系统管理员部分的主要功能包括修改登录密码、学员信息管理、科目1题目…

Java Maven和Gradle构建的主题缓存

Concourse CI 3.3.x引入了在任务运行之间缓存路径的功能。 此功能有助于加快将内容缓存在特定文件夹中的任务-在这里,我将演示如何使用此功能来加快基于Maven和Gradle的Java构建。 我在这篇文章中使用的代码和管道可以在我的github仓库中找到 – https://github.co…

java qlv转mp4 代码_怎么将qlv格式转换成mp4?教你快速转换视频格式的技巧

如何将qlv格式转换成mp4?众所周知qlv格式是腾讯视频的下载格式,而qlv格式的特点在于不能用别的播放器打开。如果用腾讯视频以外的播放器打开则需要将qlv格式转换成mp4,那你知道将qlv格式转换成mp4的技巧吗?下面小编教你一种转换qlv格式的技巧…

mysql导入竖杠分割的数据_MYSQL :逗号分隔串表,分解成竖表

DROP TEMPORARY TABLE IF EXISTS Temp_Num ;CREATE TEMPORARY TABLE Temp_Num ( xh INT PRIMARY KEY ); -- 创建数字辅助表SET i 0;INSERT INTO Temp_Num(xh) -- 写入数字辅助表SELECT i : i1FROM AdDataCenter.Ad_Targeting_Mobisage aLIMIT 0, 100 ;SELECT b.AdGroupID , SU…

maven 父maven_Maven的春天

maven 父maven1.概述 本教程将讨论如何使用Maven设置Spring,并介绍使用Spring依赖项的特定用例。 最新的Spring版本可以在Maven Central中找到。 2.基本的Maven Spring依赖关系 Spring的设计具有模块化和灵活性–基本的Spring容器可用于多种情况,而无需…

java中cell无法输出_java – iText 5.5.3 PDFPCell:长文本不适合单元格(不正确地包装文本)...

我正在尝试创建一个包含表格的波斯语PDF,我想写入它.当我的字符串很长时,它不能正确地适合单元格.感觉像字符串填充单元格颠倒!…我的意思是,例如,当我想写“你好我的朋友.什么事情?”在单元格中输出如下:|这是怎么回事? ||我的朋…

emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...

1.准备一台笔记本电脑,一根网线即可。2.将网线一头连接笔记本电脑,另一头连接存储。(连接存储的一头应连接到有扳手图标的那一网口上)3.配置IP地址IP:128.221.1.254子网掩码:255.255.255.04.ping 128.221.1.250看是否能ping通&…

浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题

题目链接 引用自晴神OJA - 边覆盖B - 极大独立集C - 稳定婚姻问题D - 笛卡尔树没赶得上全程的比赛,就做了两道,后面两道以后有时间再补。两道都是概念题,比较基础~ 以下是题解A - 边覆盖Case Time Limit: 200 MS (Others) / 400 MS (Java) …

hadoop小型集群_小型Hadoop集群的Ganglia配置和一些故障排除

hadoop小型集群Ganglia是一个针对大型集群的开源,可扩展且分布式的监视系统。 它收集,汇总并提供数十种与计算机相关的指标(例如CPU,内存,存储,网络使用情况)的时序视图。 您可以在UC Berkeley …

java 异常堆栈日志分析_Java 进阶之路:深入解读 Java 异常堆栈丢失原因

在应用程序的开发和维护中,通常需要借助运行日志来监控和定位问题。其中,在日志中打印异常堆栈信息对于定位问题极为重要,因此,作为一名工程师,对打印异常堆栈应该不陌生。笔者在实践中曾遇到一个奇怪的现象: Java 应用…

使用Spock Mocks进行Grails 3.3集成测试

在Grails单元测试中,可以轻松使用Grails随附的Spock框架来模拟或存根协作者(例如服务)。 “ 测试”一章对模拟协作者, doWithSpring / doWithConfig回调方法,在测试中模拟bean的FreshRuntime批注进行了一些解释&#…

PHP ERROR_PHP 处理错误函数

错误级别Fatal Error:致命错误(脚本终止运行)E_ERROR //致命的运行错误,错误无法恢复,暂停执行脚本E_CORE_ERROR //PHP启动时初始化过程中的致命错误E_COMPILE_ERROR //编译时致命性错,就像由Zend脚本引擎生成了一个E_ERRORE_USER_ERROR //自…

php接收文件,如何通过php 发送与接收流文件

php 发送与接收流文件sendStreamFile.php 把文件以流的形式发送receiveStreamFile.php 接收流文件并保存到本地sendStreamFile.php<?php /** php 发送流文件* param String $url 接收的路径* param String $file 要发送的文件* return boolean*/function sendStreamFile($u…

elasticsearch和php,快速开始 | Elasticsearch-PHP | Elastic

快速开始edit这一节会概述一下客户端以及客户端的一些主要方法的使用规则。在 composer.json 文件中引入 elasticsearch-php&#xff1a;{"require": {"elasticsearch/elasticsearch": "~6.0"}}用 composer 安装客户端&#xff1a;curl -s http:…

spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建

spring aop组件以下文章将显示在我参与的一个项目中&#xff0c;我们如何使用Spring的AOP来介绍一些与安全性相关的功能。 这样的概念是&#xff0c;为了使用户能够看到某些UI组件&#xff0c;他需要具有一定级别的安全特权。 如果不满足该要求&#xff0c;则不会显示UICompone…

使用Spring Boot构建RESTFul服务

每个人都在谈论微服务&#xff0c;例如WSO2微服务框架 &#xff0c; Spring Boot等。由于我已经很长时间没有从事任何与Spring相关的项目了&#xff0c;所以我想到了使用Spring Boot实现一个简单的RESTFul服务。 因此&#xff0c;我从Spring文档开始。 这很简单。 您可以使用“…