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

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

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)