当前位置: 首页 > news >正文

有趣的设计模式——适配器模式让两脚插头也能使用三孔插板


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

场景与问题

众所周知,我们国家的生活用电的电压是220V而笔记本电脑、手机等电子设备的工作压没有这么高。为了使笔记本、手机等设备可以使用220V的生活用电就需要使用电源适配器(AC Adapter);也就是人们常说的充电器或变压器。有了这个电源适配器,原本不能直接工作的生活用电和笔记本电脑就可以兼容了。

在这里插入图片描述

另外,在生活中我们还经常类似头痛的小问题:插座是两脚的,但是插板却是三孔的。这个该怎么办呢?此时,适配器设计模式就能够帮到你!

适配器模式概述

在此,概述适配器模式。

适配器模式定义

Adapter Pattern: Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.

适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。

适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时在适配器类的内部将调用适配者类的方法而这个过程对客户类是透明的;客户类并不直接访问适配者类。因此,适配器让那些由于接口不兼容而不能交互的类可以一起工作。

适配器模式可以将一个类的接口和另一个类的接口匹配起来而无须修改原来的适配者接口和抽象目标类接口。

适配器模式角色

在此,介绍适配器模式中的主要角色。

目标角色(Target):客户端所期待的接口(可以是具体类或者抽象类)。
源角色(Adaptee):被适配者。已经存在的需要适配的接口或类。
适配器(Adapter):将源接口转换成目标接口。

适配器模式案例

在此,以案例形式讲解适配器模式。

案例一

请看适配器模式案例一;项目结构如下:
在这里插入图片描述

Adaptee

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:被适配的类。例如:两脚插头
*/
public class Adaptee {public void adapteeMethod() {System.out.println("两脚插头正常工作");}
}

在这里插入图片描述

Target

/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:目标接口(客户所期待的接口)。例如:三孔插板
*/
public interface Target {void targetMethod();
}

在这里插入图片描述

Adapter

package com.adapter01;/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:适配类。例如:插头转换器
*/
public class Adapter extends Adaptee implements Target {// 实现Target接口中的方法@Overridepublic void targetMethod() {// 调用Adaptee中的方法super.adapteeMethod();}
}

在这里插入图片描述

Test

package com.adapter01;
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:测试类
*/
public class Test {public static void main(String[] args) {Adapter adapter = new Adapter();adapter.targetMethod();}
}

在这里插入图片描述

测试

在这里插入图片描述

案例二

请看适配器模式案例二;项目结构如下:

在这里插入图片描述

Adaptee

package com.adapter02;/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:被适配的类。例如:两脚插头
*/
public class Adaptee {public void adapteeMethod() {System.out.println("两脚插头正常工作");}
}

在这里插入图片描述

Target

package com.adapter02;/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:目标类(客户所期待的类)。例如:三孔插板
*/
public abstract class Target {abstract void targetMethod();
}

在这里插入图片描述

Adapter

package com.adapter02;/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:适配类。例如:插头转换器
*/
public class Adapter extends Target {// 持有Adaptee对象private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}// 重写父类Target中的方法@Overridepublic void targetMethod() {// 调用Adaptee中的方法adaptee.adapteeMethod();}
}

在这里插入图片描述

Test

package com.adapter02;
/**
* 本文作者:谷哥的小弟 
* 博客地址:http://blog.csdn.net/lfdfhl
* 代码描述:测试类
*/
public class Test {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Adapter adapter = new Adapter(adaptee);adapter.targetMethod();}
}

在这里插入图片描述

测试

在这里插入图片描述

http://www.lryc.cn/news/167294.html

相关文章:

  • 2.10 PE结构:重建重定位表结构
  • 关于content-type的理解
  • <图像处理> 空间滤波基础二
  • Java中的队列Queue
  • 机器学习技术(十)——决策树算法实操,基于运营商过往数据对用户离网情况进行预测
  • 大数据之-kafka学习笔记
  • 虚幻动画系统概述
  • 什么是集成测试?集成测试方法有哪些?
  • elementUI中的el-form常用校验规则
  • 蓝桥杯打卡Day9
  • C# 辗转相除法求最大公约数
  • 腾讯mini项目-【指标监控服务重构】2023-08-03
  • redis缓存穿透、击穿、雪崩介绍
  • Redis 基础总结
  • 基于nginx的tomcat负载均衡和集群(超简单)
  • ESIM实战文本匹配
  • 基于虚拟仿真技术的汽车燃油泵控制
  • angular:HtmlElement的子节点有Shadow dom时奇怪的现象
  • 栈与队列--删除字符串中的所有相邻重复项
  • 使用SSH地址拉取远程仓库代码报下面的错误
  • easycms v5.5 分析 | Bugku S3 AWD排位赛
  • 成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作
  • 创邻科技Galaxybase助力SPG推动知识图谱应用落地
  • 《TCP/IP网络编程》阅读笔记--域名及网络地址
  • 我的C#基础
  • 【UnityShaderLab实现“Billboard“始终面向相机_播放序列图的效果_案例分享(内附源码)】
  • Ceph入门到精通-S3 基准测试工具warp使用入门
  • Docker--未完结
  • string的使用和模拟实现
  • 基础算法---区间合并