适配器模式 以手机充电器为例

2024-02-28 10:32

本文主要是介绍适配器模式 以手机充电器为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

老样子,定义:将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以相互合作。这个定义还好,说适配器的功能就是把一个接口转成另一个接口。

发现两张图片可以很好的解释适配器模式:



这两张图很好的说明了适配器的作用哈,话说我当年买了个欧版的HTC G17 ,还配了个插头转化器,这个插头转化器就是起得适配器的作用。下来来点代码解释哈,如题目,手机充电器一般都是5V左右吧,咱天朝的家用交流电压220V,所以手机充电需要一个适配器(降压器),有什么物理名词使用错误的,见谅。

首先一部手机:Mobile.java

  1. package com.zhy.pattern.adapter;
  2. public class Mobile
  3. {
  4. /**
  5. * 充电
  6. * @param power
  7. */
  8. public void inputPower(V5Power power)
  9. {
  10. int provideV5Power = power.provideV5Power();
  11. System.out.println( "手机(客户端):我需要5V电压充电,现在是-->" + provideV5Power + "V");
  12. }
  13. }

可以看出,手机依赖一个提供5V电压的接口:

  1. package com.zhy.pattern.adapter;
  2. /**
  3. * 提供5V电压的一个接口
  4. * @author zhy
  5. *
  6. */
  7. public interface V5Power
  8. {
  9. public int provideV5Power();
  10. }

然后我们拥有的是220V家用交流电:

  1. package com.zhy.pattern.adapter;
  2. /**
  3. * 家用220V交流电
  4. * @author zhy
  5. *
  6. */
  7. public class V220Power
  8. {
  9. /**
  10. * 提供220V电压
  11. * @return
  12. */
  13. public int provideV220Power()
  14. {
  15. System.out.println( "我提供220V交流电压。");
  16. return 220 ;
  17. }
  18. }

下面我们需要一个适配器,完成220V转5V的作用:

  1. package com.zhy.pattern.adapter;
  2. /**
  3. * 适配器,把220V电压变成5V
  4. * @author zhy
  5. *
  6. */
  7. public class V5PowerAdapter implements V5Power
  8. {
  9. /**
  10. * 组合的方式
  11. */
  12. private V220Power v220Power ;
  13. public V5PowerAdapter(V220Power v220Power)
  14. {
  15. this.v220Power = v220Power ;
  16. }
  17. @Override
  18. public int provideV5Power()
  19. {
  20. int power = v220Power.provideV220Power() ;
  21. //power经过各种操作-->5
  22. System.out.println( "适配器:我悄悄的适配了电压。");
  23. return 5 ;
  24. }
  25. }

最后测试,我们给手机冲个电:

  1. package com.zhy.pattern.adapter;
  2. public class Test
  3. {
  4. public static void main(String[] args)
  5. {
  6. Mobile mobile = new Mobile();
  7. V5Power v5Power = new V5PowerAdapter( new V220Power()) ;
  8. mobile.inputPower(v5Power);
  9. }
  10. }

输出:

  1. 现有类:我提供 220V交流电压。
  2. 适配器:我悄悄的适配了电压。
  3. 手机(客户端):我需要 5V电压充电,现在是--> 5V

可以看出,我们使用一个适配器完成了把220V转化了5V然后提供给手机使用,且我们使用了组合(OO设计原则),原有的手机,以及200V电压类都不需要变化,且手机(客户端)和220V(被适配者)完全解耦。

最后画个uml类图,便于大家理解:


上面是适配器的类图,下面是我们的例子的类图,咋样,还不错吧。没事画个图也不错,不然软件都白装了。。。

这篇关于适配器模式 以手机充电器为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755237

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络