总结一下适配器模式

一、引言

适配器模式是啥?为什么要有适配模式?适配模式怎么实现?

  1. 适配器模式是啥?将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  2. 为什么要有适配器模式?例如买了个笔记本,充电需要20V电压,但是众所周知,我们国内电压为220V,因此需要个电源适配器来降压。如此,适配器也是这种作用。

二、实现适配器模式

实现适配器有三种方式:

  1. 类适配器
  2. 对象适配器
  3. 接口适配器

1. 类适配器,如下类图:


由上图可知,适配器实现了适配器接口,同时继承于220V电压,我们是(Client)客户端需要20V电压,只需要向适配器拿即可。
代码如下:

/*** 220V电压类*/
public class V220 {public void pop220(){System.out.println("释放了220V电压");}
}//--------------------------------------------------------/*** 适配器接口*/
public interface Adapter {public void pop();
}/*** 适配器类* 继承于V220,同时实现适配器接口*/
public class AdapterImpl extends V220 implements Adapter{public void pop() {super.pop220();System.out.println("适配器接收220V电压转为20V,输出");}
}//-------------------------Main方法---------------------------
public static void main(String[] args) {AdapterImpl adapter = new AdapterImpl();//向适配器拿5V电压adapter.pop();
}

运行结果为:

上面代码很简单,主要就是表达一种思想,如果调用不到想要的方法(pop220)可以用适配器中间加一层来调用。

不知道大家还是否记得设计模式七大原则——合成复用原则(说的是想要用一个类的方法,能用聚合就不要继承)。
而我们在适配器中,适配器继承了V220类,其实我们可以用聚合方式调用pop220方法。这种方式称为对象适配器。

2.对象适配器,如下类图:


类图和类适配器差不多,其实就是把继承改为聚合,减少耦合。
代码如下:

/*** 适配器类* 实现适配器接口(去掉继承转为聚合)*/
public class AdapterImpl  implements Adapter{private V220 v220;public AdapterImpl(V220 v220){this.v220=v220;}public void pop() {v220.pop220();System.out.println("适配器接收220V电压转为20V,输出");}
}//-------------------------Main方法---------------------------public static void main(String[] args) {V220 v220 = new V220();//220V电压AdapterImpl adapter = new AdapterImpl(v220);//聚合方式传入//向适配器拿5V电压adapter.pop();
}

运行结果还是一样,对象适配器和类适配器区别就在于类适配器是继承调用,对象适配器是聚合调用。

3.接口适配器

接口适配器适用于一个接口有很多方法,但是根据需求不需要全部实现,即可用接口适配器,相当于满足接口隔离原则。
类图如下:

看图很懵,现在我们来代码实现以下:

/*** 电压接口(一共有3个方法)*/
public interface Voltage {public void V5();public void V20();public void V220();
}//-------------------------------------------------------/*** 电压抽象类(实现电压接口)* 这里对接口方法作空实现*/
public  abstract class VoltageImpl implements Voltage {public void V5() {}public void V20() {}public void V220() {}
}//----------------------------Main------------------------------
public static void main(String[] args) {//对抽象类进行实现VoltageImpl voltage = new VoltageImpl() {public void V5() {System.out.println("输出5V电压");}};voltage.V5();//输出5V//--------------------------------------------------//对抽象类进行实现VoltageImpl voltage1 = new VoltageImpl() {public void V20() {System.out.println("输出20V电压");}};voltage1.V20();}

输出结果为:

以上可以看出,电压接口一共有3个方法,我们写一个抽象类实现它,然后对全部方法进行空实现,接着需要哪个方法就对抽象类进行实现就可以了,这就是接口隔离适配器。

三、结束

以上就是适配器的三种实现方式,每种都有对应的适用场景。

中央空调——适配器模式相关推荐

  1. 怎么看空调定时成功_风管机和中央空调傻傻分不清?看了你就明白怎么选了

    目前,很多装修用户在选择空调上,开始偏向于中央空调.中央空调也叫多联机,传统也会有一拖多空调的叫法.颜值绝对pk掉传统的分体挂壁或者柜机,而且在整体舒适度上,绝对高于传统空调.但是对于中央空调更加耗电 ...

  2. 中央空调“国进外退”,格力、美的、海尔三大白如何角逐新市场?

    文/螳螂财经(ID:TanglangFin) 作者/易牟 "国进外退!" 只要稍微关注中央空调行业的人,都会发现市场格局的变动,那就是"国进外退"趋势明显,国内 ...

  3. 中央空调如何调节温度html,中央空调怎么调温度

    空调可以给我们的家居生活带来舒适的体验,但也要知道如何去使用保养才行,这样才能增加空调的使用寿命,避免小麻烦的出现.那么中央空调怎么调温度,以及中央空调使用要注意哪些.各位是否了解呢.现在我们一起来看 ...

  4. 电脑常见故障排除_中央空调常见故障解析

    一.中央空调故障解析与维修 1.机器露点温度正常或偏低,室内降温慢产生原因及解决方法 ① 送风量小于设计值,换气次数少,请检查风机型号是否符合设计要求,叶轮转向是否正确,皮带是否松弛,开大送风阀门,消 ...

  5. 系统架构师 项目经理 哪个更有前景_中央空调加地暖与五恒系统,哪个更省钱?...

    每逢严冬酷暑,人们都会感叹空调是最伟大的发明,并且随着科技发展还在不断进化.从烤火取暖到空调和地暖的供暖,从纸扇电扇的吹风到空调的制冷,人们的需求正在不断提高,于是,为了满足人们的需求,市场上又衍生出 ...

  6. 我的世界javamod怎么装_「装修细节」除了中央空调外的高颜值装空调大法

    一直觉得中央空调是高颜值神器 但是对于我这种万年单身狗 在考虑开启率的情况下 好像还是风管机和挂机比较实用 但是又嫌弃挂机的电线冷凝水管丑到不行 直到我看到了-----管线背出的挂机 仿佛开启了新世界 ...

  7. ubuntu自定义安装里怎么选_中央空调到底应该怎么选?小户型也能安装中央空调?行家说实话了...

    ▲ 点击蓝字"建通舒适家",你想知道的空调问题,答案全在这里啦! 中央空调到底应该怎么选?小户型也能安装中央空调?行家说实话了 现在业主装修大多都是对中央控空调一知半解,出现很多种 ...

  8. adam算法效果差原因_干货|快来get中央空调冬天制热效果差的十大原因!

    作为调节室内温度的重要电器,中央空调在人们的生活中扮演着至关重要的角色.目前,市场上许多中央空调都是冷暖两用型,每到冬季,绝大部分家用中央空调都被纷纷派上用场:然而,有些用户在使用空调制热时,会十分惊 ...

  9. 使用cdn和npm引入的区别_中央空调和新风系统有什么区别?有必要一起装吗?

    舒适的家居装修不仅仅需要在设计上精致细巧,更是需要在家的功能上多下功夫,很多人在装修家居的时候会在家里安装新风系统,通风换气,实用的很,但是想要家里处处冬暖夏凉,或许中央空调更为合适,那么你知道新风系 ...

最新文章

  1. Android Html.fromHtml 的使用
  2. 【深度学习】(1) 前向传播,附python完整代码
  3. Javascript 装饰器极速指南
  4. [USACO5.3]校园网Network of Schools
  5. [LeetCode] 461. Hamming Distance
  6. go uint64 转 字符_Go的基本数据类型入门看这一篇就差不多了
  7. Maven exec:java 运行 Java main 方法
  8. 使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道
  9. 诺基亚2亿欧元建越南新工场
  10. 项目中AOP的使用-读写分离
  11. mysql判断不为null
  12. XNA:2D图元与3D模型共存时的渲染问题
  13. C#中类的修饰符,this关键字和static关键字
  14. 计算机上的刷新快捷键,刷新快捷键是
  15. 新浪批量短网址生成php源码,最新新浪短网址API接口与短网址在线批量生成工具的使用方法...
  16. 高通骁龙875夺安卓处理器桂冠,但外挂5G基带成为它的弊病
  17. 关于scanf函数返回值被忽略的解决方法
  18. 人活着最重要的是什么
  19. 一切都结束了。OI退役感言。
  20. git出现的若干问题以及解决方案

热门文章

  1. python字符串说法错误的是_以下选项中,关于Python字符串的描述错误的
  2. 又双叒叕种草了新家装风格?AI帮你家居换装
  3. redis学习(1)之redis基础和配置主从
  4. 1. 微博大学数学答疑系列(1)
  5. ckc交易什么意思_创业板20%涨跌幅什么时候开始
  6. 大模型时代的科研基础之:Prompt Engineering
  7. QT界面开发--基础学习篇一(上)
  8. JSP+ssm计算机毕业设计青少年游戏防沉迷系统n69g9【源码、数据库、LW、部署】
  9. Siri会说话的秘密:终极目标是“杀死人类”
  10. FastText:快速的文本分类器