什么是适配器,说文解字一下,这里的适配应该是个动词,而且用古文的用法应该是使动用法,翻译成为,使.....适合原有的事物,配合新的事物的器具。

曾几何时,我也有幸卖过笔记本电脑,也是在那我第一次听到了适配器这个词语。一个连接电源和电脑的小黑块,上面注明了电压,电流等等的属性,这就是适配器。这里或许要适配几种事物啦,适配电源,起变压作用,同时适配电线,使三角插座可以变成一个圆圆的小孔插线插入笔记本电脑的电源口。

所以,咱们这儿用白话,或者说是人话来解释一下什么是适配器。用一个器具让原事物A再不需要改变的条件下可以满足事物B的要求。

这里再啰嗦下,贴下百科上面的适配器模式的注解:

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。

一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

再看这样很晦涩的话应该就很容易去理解什么是适配器模式。

OK,说了一大堆的废话,会JAVA的我们,到底如何用JAVA语言来描述出适配器模式呢?这里我们就用笔记本的例子来描述出适配器模式!

首先,先阐述下笔记本这个例子里的几个事物。

1.电线220V:用于插在电源插座上和连接电器,传输电源220V电压和一个三孔的的电源出口。

2.电线110V:用户连接适配器和笔记本电脑,可以传输110V电压和一个单孔电源出口。

3.适配器:用于连接电线220v和电线110v,将220V电压转换成110V电压。降电线的3孔电源出口转化成为笔记本电脑所需要单孔电源。

4.普通家用电脑主机,可以直接用直接连接220V的3孔电源线。

5.笔记本电脑,只能连接110V的电线和有一个单孔电源进口。

6.人,开启电脑

/*** 电线接口,提供电压和3孔电源出口* 将就理解下把,我的英文水平也就这样了*/
public interface Line1 {//提供220V电压public void voltage220();//提供3孔电源出口public void kong3();
}

当电线定义完毕出之后,我们就需要一台PC主机去实现这个电线的功能。

public class PcMechine implements Line1 {@Overridepublic void kong3() {System.out.println("3孔插座插入");      }@Overridepublic void voltage220() {System.out.println("连接电源,提供220V电压");}
}

这时候我们再定义一个人的类,这个人类就是负责来启动电脑

public class Person {/*** 使用220V电源线开启电脑* @param line1*/public void startPc(Line1 line1){line1.voltage220();line1.kong3();System.out.println("启动电脑");}
}

我们测试一下。

public class Test {/*** @param args*///拿一台直接连接好220V电源线的主机Line1 mechine= new PcMechine();Person p = new Person();p.startPc(mechine);}

输出结果:

连接电源,提供220V电压
3孔插座插入
主机启动

然后现在我们多了一台笔记本,这个卖笔记本的还算有良心,送给我们一条110V的单孔线。。

电源线:

public interface Line2 {//提供110V电压public void voltage110();//提供1孔电源出口public void kong1();
}

笔记本电脑

public class NotePc implements Line2 {@Overridepublic void kong1() {System.out.println("单孔插座插入");}@Overridepublic void voltage110() {System.out.println("使用110V电压");}}

这时候问题来了,这根电线对于我们的PC主机是可以直接使用的,因为PC主机是直接使用用220V电压已经3孔的电源的。

但是如果我们现在 又多了一台笔记本,笔记本是使用110V电压,并且只能使用单孔的电源,怎么办。而我们手上有的是一条单孔110V的电源线,但是问题是这条电源线不能插到插座上,咋办?

我们意淫一下,把220V线的线先抽掉几根变成110V,再把3头剪掉和110V的线拧在一块?没问题,当我们大干一场之后,我们终于可以用笔记本电脑了。这时候,我突然想起我有重要的资料在台式电脑里,完蛋,现在线让我剪掉了,不能连到台式电脑上了。。

额,这时候适配器出现了。

不管杂说,买也好,手动做也好,总之我们有了这个适配器。这个适配器和PC机一样,有3孔电源口,需要220V电压。但是他在接入220V电源之后,可以降220V电源转化成110V电源输出,可以将3孔输入转化成单孔输出。

public class Adapter implements Line1{//适配器可以连接110V的单孔电源线private Line2 line2;public Adapter(Line2 line2){this.line2=line2;}@Overridepublic void kong3() {System.out.println("将3孔电源转换为单孔电源");line2.kong1();}@Overridepublic void voltage220() {System.out.println("连接电源,将220V电压转换为110V电压");line2.voltage110();}}

好了,适配器我们已经弄好了,把适配器和220V电源线,110V电源线都连接起来,测试一下吧,看看笔记本电脑能不能正常使用。

public class Test {public static void main(String[] args) {//拿一台带110V电源线的笔记本来Line2 notePc = new NotePc();//造了一个适配器,并连接上220V电源线,然后把连接着笔记本的110V电源线插入到适配器Line1 Adapter= new Adapter(notePc);Person p = new Person();//将连着笔记本电脑的和220V电源线的适配器提供给人,并开机p.startPc(Adapter);}
}

输出:

连接电源,将220V电压转换为110V电压
使用110V电压
将3孔电源转换为单孔电源
单孔插座插入
启动电脑

哇塞,笔记本电脑启动了。。

至此,适配器模式介绍完毕。我们回头再来总结一下,到底什么是适配器。

正如我上面的代码,适配器是一个工具,他兼容适应原有的事物(220V的电源线),并且配合能与新的事物(110V电源线)。

这里的220V电源线,相当于原有代码,他可以满足PC主机的要求。

而笔记本电脑呢是新的客户,或者说新的要求。

再不改造原有代码的情况下,造一个新的工具,来满足新的要求。这就是适配器模式。

透过适配器模式,我们再来看JAVA,其实适配器模式是一种JAVA多态性的一种使用。一个抽象的方法,可以有多种实现的方式。正如一条220V的电源线,可以直接连接PC,也可以连接具有变压功能的适配器。这都是不同的连接方式(实现方式),当不同连接的时候会生成新的结果。

这不就是JAVA多态性的最好体现吗?

文字有些凌乱,还请见谅。

本文乃原创,转载请注明出处。。谢谢啦。

菜鸟版JAVA设计模式—从笔记本电源线看适配器模式相关推荐

  1. 菜鸟版JAVA设计模式-从抽象与实现说桥接模式

    桥接模式,初学的时候事实上非常不理解为什么要把这个模式命名为桥接模式,脑海里突然联想到.事实上我学习是一件比較痛苦的事情,由于我必需要知道来龙去脉才干学的进去,所以,非常快我就对这个命名产生了兴趣,桥 ...

  2. Java设计模式之结构型:适配器模式

    一.什么是适配器模式: 适配器模式主要用于将一个类的接口转化成客户端希望的目标类格式,使得原本不兼容的类可以在一起工作,将目标类和适配者类解耦:同时也符合"开闭原则",可以在不修改 ...

  3. java设计模式7,一看就懂,架构灵魂,工厂方法模式

    目录 一.工厂模式 二.工厂方法模式的优缺点 1.优点 2.缺点 三.模拟场景 四.违背原则方案 1.思路清晰,简单明了 2.但是,似乎违反了一些设计原则: 五.通过工厂方法模式重构代码 1.定义购买 ...

  4. Java设计模式笔记(7)适配器模式

    适配器模式定义:将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式(Adapter Pattern),适配器模式又叫做变压器模式,也 ...

  5. JAVA设计模式面试小考点之 适配器模式(实例讲解)

    又到了小葵花妈妈课堂开课的时间啦.今儿让我们来学习一下是适配器模式. 定义 适配器模式,即定义一个包装类,用于包装不兼容接口的对象 其实不看定义,故名思意就知道适配器就是适配不同的接口之间的中间件.生 ...

  6. Java设计模式之行为型:状态模式

    背景: 介绍状态模式前,我们先看这样一个实例:公司力排万难终于获得某个酒店的系统开发项目,并且最终落到了你的头上.下图是他们系统的主要工作: 当第一眼看到这个系统时你就看出这是一个状态图,每个框都代表 ...

  7. Java设计模式之行为型:迭代器模式

    一.什么是迭代器模式: 实际开发中,我们针对不同的需求,可能需要以不同的方式来遍历整个整合对象,但我们不希望在集合容器的抽象接口层中充斥着各种不同的遍历操作,这时候我们就需要一种能完成下面功能的迭代器 ...

  8. Java设计模式之结构型:外观模式

    一.什么是外观模式: 外观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口.使用外观模式有以下几点好处: (1)更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要 ...

  9. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

  10. Java设计模式之创建型:建造者模式

    一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...

最新文章

  1. c#操作oracle的通用类
  2. 深入理解alias, alias_method和alias_method_chain
  3. 会话跟踪之Session
  4. markdown入门4--矩阵空格公式方程组
  5. 对称矩阵、Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵、合同矩阵、正定矩阵...
  6. Linux开发sudo apt-cache search检索包
  7. MFC在指定控件区域内进行一些操作
  8. ios越狱c语言编译器,IT之家学院:iOS越狱插件利器之Flex — App UI修改篇
  9. HTTP下载文件到本地
  10. web前端开发面试题(二)
  11. 五分钟了解机器学习的基本概念
  12. 获取浏览器的地理位置信息
  13. 【Python学习】(9)[Errno 2]No such file or directory:'calibri.ttf'
  14. 网证CTID是一种什么业务?有什么前景?
  15. 着眼未来 巅峰对决 | “智算之道—2020人工智能应用挑战赛”圆满收官!
  16. html手抄报怎么制作软件,如何用word制作一个精美的电子板报
  17. Python 遍历文件夹下所有文件 合并txt内容
  18. bus_dev_drv 模型
  19. 合理清除AlibabaProtect进程
  20. 性能测试报告(入门)

热门文章

  1. 用bootstrap实现的,三种风格的登录界面网页源码
  2. bug10下的工具(以防重新装机)
  3. P2619 [国家集训队]Tree I(wqs二分)
  4. 把计算机网络关闭啦怎么打开,网络发现已关闭怎么办?Win7系统启用/关闭网络发现方法(图文)...
  5. edz文件怎么导入EPLAN Electric P8
  6. LimeSDR官方系列教程(一):LimeSDR简介
  7. MSE 支持 Apache Shenyu 网关实现全链路灰度
  8. Android多开/分身检测
  9. RPM包安装相关命令
  10. android 照片同步 icloud,如何将iCloud照片传输到Android手机