什么适配器?what

适配器即:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要解决:主要解决在软件系统中,常常要将一些”现存的对象”放到新的环境中,而新环境要求的接口是现对象不能满足的。
例如:现在的手机都没专门的耳机接口了,但是手机上的Type-C接口实现了有充电、文件传输、音频传输功能;
但是不能直接将现有的音频通过Type-C接口输出,需要一个Type-C转耳机接口的适配器;
怎么实现适配器?how
用上面手机Type-C的例子实现代码如下:
IPhoneTypeC.java
/*** 手机type-C功能*/public interface IPhoneTypeC {void fileTransfer(String fileName);void powerTransfer(String fileName);}
Type-C接口有两个功能 充电和传输文件
传输文件TypeCForFile
public class TypeCForFile implements IPhoneTypeC {@Overridepublic void fileTransfer(String fileName) {System.out.println("file transfer fileName:"+fileName);}@Overridepublic void powerTransfer(String fileName) {//do nothing}}
充电 TypeCForPower
public class TypeCForPower implements IPhoneTypeC {@Overridepublic void fileTransfer(String fileName) {//do nothing}@Overridepublic void powerTransfer(String fileName) {System.out.println("power transfer fileName:"+fileName);}}
提供一个传输线 ITransfer
/*** 手机type-c适配器 接口传输*/public interface ITransfer {void transfer(String type,String fileName);}
文件传输或充电 FileOrPowerTransfer
public class FileOrPowerTransfer implements ITransfer {private IPhoneTypeC iPhoneTypeC ;public FileOrPowerTransfer(String fileType){if("file".equals(fileType)){iPhoneTypeC= new TypeCForFile();}else if("power".equals(fileType)){iPhoneTypeC=new TypeCForPower();}}@Overridepublic void transfer(String type,String fileName) {if("file".equals(type)){iPhoneTypeC.fileTransfer(fileName);}else if("power".equals(type)){iPhoneTypeC.powerTransfer(fileName);}}}
现在需要适配一个音乐播放MediaTransfer
public class MediaTransfer implements ITransfer {private FileOrPowerTransfer fileTransfer;@Overridepublic void transfer(String type, String fileName) {if("media".equals(type)){System.out.println("media transfer fileName:"+fileName);}else if("file".equals(type) ||"power".equals(type)){fileTransfer = new FileOrPowerTransfer(type);fileTransfer.transfer(type,fileName);}else{System.out.println(type+" format not supported");}}}
测试手机Type-c传输功能
public static void main(String[] args) {ITransfer transfer = new MediaTransfer();transfer.transfer("file","简历.doc");transfer.transfer("power","....");transfer.transfer("avi","苍老师.avi");transfer.transfer("media","alone.mp3");}
输出结果
file transfer fileName:简历.docpower transfer fileName:....avi format not supportedmedia transfer fileName:alone.mp3
为什么使用适配器?why
我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。
接口Ps2:描述ps2接口格式
接口Usb:描述USB接口格式
类Usber:是接口Usb的实现类,是具体的USB接口格式
Adapter:用于将ps2接口格式转换成为USB接口格式
