适配器模式(Adapter Class/Object)
来源:互联网 发布:spss如何输入数据 编辑:程序博客网 时间:2024/06/06 12:20
适配器模式(Adapter Class/Object)
是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作。
举个例子:macbook pro有一个HDMI接口,一条HDMI接口的数据线,现在要外接显示器,而显示器只有VGI接口,我们需要一个HDMI-VGI转换器,这个转换器其实起到的作用就是适配器,让两个不兼容的接口可以一起工作。
类图:
适配器有4种角色:
1.目标抽象角色(Target):定义客户所期待的使用接口。(GVI接口)
2.源角色(Adaptee):需要被适配的接口。(HDMI接口)
3.适配器角色(Adapter):把源接口转换成符合要求的目标接口的设备。(HDMI-VGI转换器)
4.客户端(client):例子中指的VGI接口显示器。
把HDMI接口转换成VGI接口,使得macbook pro可以外接显示器。
//HDMI接口,需要被适配的接口public interface HDMIPort { void workByHDMI();}
//VGI接口,客户端所期待的接口public interface VGIPort { void workByVGI();}
//将HDMI接口转换为VGI,这就是适配器public class HDMIToVGI implements VGIPort{ HDMIPort hdmiPort; public HDMIToVGI(HDMIPort hdmiPort) { this.hdmiPort = hdmiPort; } //将HDMI接口转换为VGI接口 @Override public void workByVGI() { hdmiPort.workByHDMI(); }}
public static void main(String[] args) { //定义一个HDMI接口 HDMIPort hdmiPort = new HDMIPort() { @Override public void workByHDMI() { //hdmi接口工作方式 } }; //将HDMI接口转换为VGI接口 VGIPort vgiPort = new HDMIToVGI(hdmiPort); //经过转换HDMI接口变成了VGI接口 vgiPort.workByVGI(); }
总结
适配器模式优点:
1.可以让任何两个没有关联的类一起运行。
2.提高了类的复用。
3.增加了类的透明度。
4.灵活性好。
适配器模式缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。
适用场景:
1.系统需要使用现有的类,而此类的接口不符合系统的需要。
2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
3.通过接口转换,将一个类插入另一个类系中。
Test
package com.qbz.test;//MicroUSB接口,客户端所期待的接口interface MicroUSB { void process();}// USBTypec接口,需要被适配的接口interface USBTypec { void process();}class Phone implements MicroUSB { @Override public void process() { System.out.println("使用MicroUSB接口进行充电"); }}class Car implements USBTypec { @Override public void process() { System.out.println("使用USBTypec接口进行充电"); }}// 适配器,将USBTypec接口转换成MicroUSBclass USBTypecToMicroUSB implements MicroUSB { USBTypec usbTypec; public USBTypecToMicroUSB(USBTypec usbTypec) { this.usbTypec = usbTypec; } @Override public void process() { System.out.println("USBTypec接口转换成MicroUSB"); // 将USBTypec接口转换成MicroUSB接口 usbTypec.process(); }}public class Main { public static void main(String[] args) { USBTypec usbTypec = new Car(); USBTypecToMicroUSB tTom = new USBTypecToMicroUSB(usbTypec); tTom.process(); }}
输出:
USBTypec接口转换成MicroUSB使用USBTypec接口进行充电
0 0
- 适配器模式(Adapter Class/Object)
- 设计模式之适配器模式(Adapter Class/Object)
- Adapter Class/Object(适配器)
- 设计模式读书笔记:Adapter Class/Object(适配器)
- c++设计模式(五)Adapter class/object 适配器
- 设计模式--class adapter object adapter
- 【初学设计模式】Object Adapter (对象适配器)
- 【初学设计模式】Class Adapter (类适配器)
- Adapter 模式 - Object Adapter
- Adapter 模式 - Object Adapter
- Adapter 模式 - Class Adapter
- Adapter 模式 - Class Adapter
- Adapter模式 适配器模式
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 适配器(Adapter)模式
- 适配器模式(Adapter Pattern)
- ADAPTER(适配器)模式
- 屏幕适配工具
- web轻巧的图表表示数据——echart
- 移动宽带之优化
- 错误 1 error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值
- 从 __proto__ prototype 说起
- 适配器模式(Adapter Class/Object)
- 《JAVA与模式》之适配器模式
- 2016年8月30号
- js点击事件demo
- 从零基础接触java第七周第二节
- Intellij Idea @Autowired取消提示
- js闭包使用及建议
- WebStorm快捷键操作
- >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏