視頻拍攝腳本模板廣州seo優(yōu)化費(fèi)用
一、概述
將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
二、適用性
1.你想使用一個(gè)已經(jīng)存在的類,而它的接口不符合你的需求。
2.你想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見(jiàn)的類(即那些接口 可能不一定兼容的類)協(xié)同工作。
3.(僅適用于對(duì)象Adapter)你想使用一些已經(jīng)存在的子類,但是不可能對(duì)每一個(gè)都進(jìn)行 子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口。
三、參與者
1.Target 定義Client使用的與特定領(lǐng)域相關(guān)的接口。
2.Client 與符合Target接口的對(duì)象協(xié)同。
3.Adaptee 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配。
4.Adapter 對(duì)Adaptee的接口與Target接口進(jìn)行適配
四、類圖
五、示例
Target接口
public interface Target {void adapteeMethod();void adapterMethod();
}
?Adaptee類
public class Adaptee {public void adapteeMethod() {System.out.println("Adaptee method!");}
}
適配器類Adapter
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee){this.adaptee = adaptee;}@Overridepublic void adapteeMethod() {adaptee.adapteeMethod();}@Overridepublic void adapterMethod() {System.out.println("Adapter method!");}
}
測(cè)試類
public class TestAdapter {@Testpublic void ruleTest() {Target target = new Adapter(new Adaptee());target.adapteeMethod();target.adapterMethod();}
}
測(cè)試結(jié)果
Connected to the target VM, address: '127.0.0.1:3881', transport: 'socket'
Adaptee method!
Adapter method!
Disconnected from the target VM, address: '127.0.0.1:3881', transport: 'socket'
?六、實(shí)踐
文件中心服務(wù)開(kāi)發(fā)。

自研文件服務(wù)相關(guān)
/*** @author* @createTime 2021年01月15日* @Description 自研文件服務(wù)接口*/
public interface IFileOperateService {/*** 上傳文件* @param dto 參數(shù)* @return 文件id*/String upload(FileUploadDto dto);/*** 流式上傳文件* @param streamDto 參數(shù)* @return 文件id*/String upload4Stream(FileUploadForStreamDto streamDto);/*** 下載文件* @param fileId 文件id* @return 結(jié)果*/FileDownloadDto download(String fileId);/*** 流式下載文件* @param fileId 文件id* @return 結(jié)果*/FileDownloadForStreamDto download4Stream(String fileId);
}
?實(shí)現(xiàn)
/*** @author* @createTime 2021年01月15日* @Description 自研文件服務(wù)實(shí)現(xiàn)*/
public class CustomFileOperateServiceImpl implements IFileOperateService {@Overridepublic String upload(FileUploadDto dto) {System.out.println("自研文件服務(wù)上傳文件...");return null;}@Overridepublic String upload4Stream(FileUploadForStreamDto streamDto) {System.out.println("自研文件服務(wù)流式上傳文件...");return null;}@Overridepublic FileDownloadDto download(String fileId) {System.out.println("自研文件服務(wù)下載文件...");return null;}@Overridepublic FileDownloadForStreamDto download4Stream(String fileId) {System.out.println("自研文件服務(wù)流式下載文件...");return null;}
}
第三方文件相關(guān)
/*** @author* @createTime 2021年01月15日* @Description 第三方文件服務(wù)接口*/
public interface IThirdPartyFileOperateService {/*** 上傳文件* @param dto 參數(shù)* @return 文件id*/String upload(FileUploadDto dto);/*** 流式上傳文件* @param streamDto 參數(shù)* @return 文件id*/String upload4Stream(FileUploadForStreamDto streamDto);/*** 下載文件* @param fileId 文件id* @return 結(jié)果*/FileDownloadDto download(String fileId);/*** 流式下載文件* @param fileId 文件id* @return 結(jié)果*/FileDownloadForStreamDto download4Stream(String fileId);
}
實(shí)現(xiàn)
/*** @author* @createTime 2021年01月15日* @Description 阿里oss服務(wù)*/
public class AliOssFileOperateServiceImpl implements IThirdPartyFileOperateService {@Overridepublic String upload(FileUploadDto dto) {System.out.println("oss文件服務(wù)上傳文件...");return null;}@Overridepublic String upload4Stream(FileUploadForStreamDto streamDto) {System.out.println("oss文件服務(wù)流式上傳文件...");return null;}@Overridepublic FileDownloadDto download(String fileId) {System.out.println("oss文件服務(wù)下載文件...");return null;}@Overridepublic FileDownloadForStreamDto download4Stream(String fileId) {System.out.println("oss文件服務(wù)流式下載文件...");return null;}
}
聲明一個(gè)統(tǒng)一的適配標(biāo)準(zhǔn)
/*** @author * @createTime 2021年01月15日* @Description*/
public interface FileOperateAdaptee extends IThirdPartyFileOperateService {
}
適配器-CustomFileOperateAdaptor
/*** @author * @createTime 2021年01月15日* @Description*/
public class CustomFileOperateAdaptor implements FileOperateAdaptee {private final IFileOperateService customFileOperationService;public CustomFileOperateAdaptor(IFileOperateService customFileOperationService) {this.customFileOperationService = customFileOperationService;}@Overridepublic String upload(FileUploadDto dto) {return customFileOperationService.upload(dto);}@Overridepublic String upload4Stream(FileUploadForStreamDto streamDto) {return customFileOperationService.upload4Stream(streamDto);}@Overridepublic FileDownloadDto download(String fileId) {return customFileOperationService.download(fileId);}@Overridepublic FileDownloadForStreamDto download4Stream(String fileId) {return customFileOperationService.download4Stream(fileId);}
}
適配器-MultiWriteAndReadCustomOperateAdaptor
/*** @author* @createTime 2021年01月15日* @Description 上傳時(shí)多寫(xiě),讀取時(shí)優(yōu)先從自研文件服務(wù)中讀取的適配器*/
public class MultiWriteAndReadCustomOperateAdaptor extends AbstractFileMultiWriteOperateAdaptor {public MultiWriteAndReadCustomOperateAdaptor(IFileOperateService fileOperationService, IThirdPartyFileOperateService thirdPartyFileOperationService) {super(fileOperationService, thirdPartyFileOperationService);}@Overridepublic String upload(FileUploadDto dto) {System.out.println("MultiWriteAndRead文件服務(wù)上傳文件...");return null;}@Overridepublic String upload4Stream(FileUploadForStreamDto streamDto) {System.out.println("MultiWriteAndRead文件服務(wù)流式上傳文件...");return null;}@Overridepublic FileDownloadDto download(String fileId) {System.out.println("MultiWriteAndRead文件服務(wù)下載文件...");return null;}@Overridepublic FileDownloadForStreamDto download4Stream(String fileId) {System.out.println("MultiWriteAndRead文件服務(wù)流式下載文件...");return null;}
}
文件服務(wù)工廠-FileOperateFactory
/*** @author* @createTime 2021年01月15日* @Description 文件服務(wù)工廠*/
public class FileOperateFactory {public static IThirdPartyFileOperateService getDefault() {return getInstance(EnumFileOperateType.MULTI_WRITE_AND_READ_FROM_CUSTOM);}/*** 獲取對(duì)應(yīng)的文件服務(wù)實(shí)例* @param operationType 類型* @return 實(shí)例*/public static IThirdPartyFileOperateService getInstance(EnumFileOperateType operationType) {switch (operationType) {case OSS:return new AliOssFileOperateServiceImpl();case CUSTOM:return new CustomFileOperateAdaptor(new CustomFileOperateServiceImpl());case MULTI_WRITE_AND_READ_FROM_CUSTOM:return new MultiWriteAndReadCustomOperateAdaptor(new CustomFileOperateServiceImpl(),new AliOssFileOperateServiceImpl());default:throw new IllegalArgumentException("storageType is not support");}}
}
自測(cè)
@Test
public void fileTest() {IThirdPartyFileOperateService operateService = FileOperateFactory.getInstance(EnumFileOperateType.MULTI_WRITE_AND_READ_FROM_CUSTOM);operateService.upload(new FileUploadDto());operateService.download("this is fileId");
}
自測(cè)結(jié)果
Connected to the target VM, address: '127.0.0.1:6502', transport: 'socket'
MultiWriteAndRead文件服務(wù)上傳文件...
MultiWriteAndRead文件服務(wù)下載文件...
Disconnected from the target VM, address: '127.0.0.1:6502', transport: 'socket'