版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址: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();}
}

测试

有趣的设计模式——两脚插头也能使用三孔插板相关推荐

  1. matlab 跳步循环,跳步急停是用单脚或双脚起跳,上体稍后仰,两脚同时平行落地。落地时()着地,用前脚掌内侧抵蹬住地面,两膝弯曲,降低重心,两臂屈肘微张,以保持身体平衡。...

    跳步急停是用单脚或双脚起跳,上体稍后仰,两脚同时平行落地.落地时()着地,用前脚掌内侧抵蹬住地面,两膝弯曲,降低重心,两臂屈肘微张,以保持身体平衡. 更多相关问题 [单选] 柴油机对机油进行强制冷却的 ...

  2. 程序员硬核资源:一本贼有趣的设计模式学习pdf

    在逛博客的时候,发现了这本设计模式的pdf书籍,真的是很有趣,爱了爱了!!插图配文字,轻松学到设计模式.肝!!! 获取方式: 扫下方二维码,回复「设计模式」 ????长按上方二维码 2 秒 回复「设计 ...

  3. 模板方法设计模式两种实现方案

    目录 1.模板方法设计模式 2.继承实现方案 3.依赖实现方案 3.1 spring-jdbc 中的 JdbcTemplate 3.2  阿里分布式事务框架Seata中的ExecuteTemplate ...

  4. (转)java关于23种java关于23种设计模式的有趣见解 设计模式的有趣见解

    创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就 ...

  5. basler相机的触发线是那两脚_机器视觉相机类型以及接口标准详解

    随着成像技术的进步,相机及其接口的类型不断演变,以满足大量应用的需求.对于检测和分析至关重要的半导体,电子,生物技术,装配和制造行业中的机器视觉应用而言,使用最好的相机系统来完成手头的任务对于获得最佳 ...

  6. basler相机的触发线是那两脚_车牌相机是怎么和LED屏联动的?

    这是一款带4行屏的车牌识别一体机立柱,结构经典,应用广泛.今天要给大家分享的相机是如何联动LED屏显示,以及LED背后的LED控制板(下称控制板)又在其中起到什么作用. 文章会从三个方面分析,分别是, ...

  7. basler相机的触发线是那两脚_探究机器视觉领域线扫相机和面阵相机的区别

    首先,我们从使用用途上来了解这两种工业相机的区别. 芯片对比 面阵相机芯片是有x*y个像素构成,是一个平面.线扫秒相机一般情况下是有x*1个像素构成一条线,从形状上来说是一条线.高端的线扫相机也有x* ...

  8. 有趣的设计模式——微信公众号中蕴藏的观察者模式

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 观察者模式概述 在正式进入该设计模式之前,我想问一下:你们平常都用微信干什么呢? " ...

  9. unity 开枪_史诗般的游戏可能在两脚都开枪

    unity 开枪 You've surely heard about the gaming industry's biggest story by now: Epic Games is suing A ...

  10. 有趣的设计模式——从一杯奶茶品味装饰模式

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 概述 装饰模式定义:动态地给一个对象添加额外的职责和功能.也就是说:我们可以在不使用继承.不改 ...

最新文章

  1. mvn项目中的pom文件提示Error parsing lifecycle processing instructions解决
  2. 杨海坡:比特币分叉往事
  3. 常考数据结构与算法:求平方根
  4. 《大道至简》第八章读后感
  5. mysql 建库字段_MySQL 的字段类型以及建库策略
  6. java c语言 for_Java能写C语言编译器吗
  7. python3兼容python2 print_python 字符串 r raw Python2 和 Python3 的区别及兼容技巧
  8. 对GCN,Transformer, XLNet, ALBERT, CRF等技术仍然一知半解?再不学习就OUT了!
  9. 没有基础的人可以学python吗-无基础可以学习Python吗?
  10. 北京ICP经营许可证备案申请流程 电信业务经营许可办理
  11. python重定向作用_Python重定向不起作用
  12. 「HNOI 2015」实验比较
  13. 安装idea社区版并开发JavaWeb项目
  14. 周报,当前是第几周 ?
  15. 数模备战——基础知识笔记
  16. 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D
  17. 深圳首辆数字人民币主题观光巴士亮相
  18. Linux定时重启任务示例
  19. The Great Gatsby翻译摘录
  20. 员工满意度对企业的重要性

热门文章

  1. 音视频技术开发周刊 | 241
  2. 5个免费、优质视频素材网站,可商用
  3. 使用kali系统中legion工具包进行漏扫时闪退,原因是legion工具包版本问题,使用命令sudo apt-get install legion更新一下就解决了
  4. 2016年1月.CN域名总量净增44.7万 增速环比下降
  5. android ca,Android CA证书安装流程
  6. Android Startup实现分析
  7. RFID射频识别的解读及应用
  8. 信息安全技术--轮转机密码
  9. htc xv6950 刷机方法
  10. 计算机英语性考任务答案,国开电大理工英语1单元自测7形考任务答案