一、什么是适配器模式
二、角色组成
三、优缺点
四、应用场景
4.1 生活场景
4.2 java场景
五、代码实现
当我们去国外旅游时,我们可能只会汉语,而当地人只会英语,那么这个时候就需要一个翻译员(翻译软件)来帮助我们。这就类似于适配器模式,通过一个适配器将一个不兼容的接口转成另外一个接口。下面以翻译为例,介绍一下类、接口、对象适配器。
5.0 代码结构
5.1 类适配器模式
目标接口‘target’,里面定义了一个‘translate’方法。(对象适配器模式也要用)
/**
* @author Created by njy on 2023/6/8
* 目标接口(target)
*/
public interface Target {
/**
* 翻译
* @param source 母语
* @param target 要翻译成的语种
* @param words 内容
*/
void translate(String source,String target,String words);
}
翻译类‘Translator’ ,里面有‘TranslateInZh’和‘TranslateInEn’方法。(对象、接口适配器模式也要用)
/**
* @author Created by njy on 2023/6/8
* 源对象(source):充当翻译
*/
public class Translator {
//英——》汉
public void translateInZh(String words){
if("hello world!".equals(words)){
System.out.println("翻译成中文:”你好世界!“");
}
}
//汉——》英
public void translateInEn(String words){
if("你好世界!".equals(words)){
System.out.println("Translate in English:”hello world!“");
}
}
}
ClassAdapter
/**
* @author Created by njy on 2023/6/11
* 类适配器:通过多重继承目标接口和被适配者类方式来实现适配
*/
public class ClassAdapter extends Translator implements Target {
@Override
public void translate(String source, String target, String words) {
if("中文".equals(source) && "英文".equals(target)) {
//汉--》英
this.translateInEn(words);
} else {
//英--》汉
this.translateInZh(words);
}
}
}
testClassAdapter
/**
* @author Created by njy on 2023/6/8
*/
@SpringBootTest
public class TestAdapter {
//类适配器
@Test
void classAdapter(){
//创建一个类适配器对象
ClassAdapter adapter=new ClassAdapter();
adapter.translate("中文", "英文", "你好世界!");
adapter.translate("英语","中文","hello world!");
}
}
5.2 对象适配器模式
ObjectAdapter
/**
* @author Created by njy on 2023/6/11
* 对象适配器:使用组合的方式
*/
public class ObjectAdapter implements Target {
private Translator translator=new Translator();
@Override
public void translate(String source, String target, String words) {
if("中文".equals(source) && "英文".equals(target)) {
//汉--》英
translator.translateInEn(words);
} else {
//英--》汉
translator.translateInZh(words);
}
}
}
testObjectAdapter
/**
* @author Created by njy on 2023/6/8
*/
@SpringBootTest
public class TestAdapter {
//对象适配器
@Test
void ObjectAdapter(){
ObjectAdapter adapter=new ObjectAdapter();
adapter.translate("中文", "英文", "你好世界!");
adapter.translate("英语","中文","hello world!");
}
}
5.3 接口适配器模式
target2:用于解释接口适配器
/**
* @author Created by njy on 2023/6/11
* target2:用于解释接口适配器
*/
public interface target2 {
/**
* 翻译
* @param source 母语
* @param target 要翻译成的语种
* @param words 内容
*/
void translate(String source,String target,String words);
//无用方法,仅仅用来说明接口适配器
void a();
}
AbstractAdapter抽象类
/**
* @author Created by njy on 2023/6/8
* AdapterTranslate抽象类
*/
public abstract class AbstractAdapter implements target2 {
private Translator translator=new Translator();
@Override
public void translate(String source, String target, String words) {
if("中文".equals(source) && "英文".equals(target)) {
//汉--》英
translator.translateInEn(words);
} else {
//英--》汉
translator.translateInZh(words);
}
}
@Override
public void a() {
}
}
InterfaceAdapter:接口适配器
/**
* @author Created by njy on 2023/6/11
* 接口适配器:当不需要全部实现接口方法时。
* 可以先设计一个抽象类实现接口AdapterTranslate
* AdapterTranslate实现,不用去实现b()方法
*/
public class InterfaceAdapter extends AbstractAdapter {
public void translate(String source, String target, String words) {
super.translate(source,target,words);
}
}
testInterfaceAdapter
/**
* @author Created by njy on 2023/6/8
*/
@SpringBootTest
public class TestAdapter {
//接口适配器
@Test
void interfaceAdapter(){
InterfaceAdapter adapter=new InterfaceAdapter();
adapter.translate("中文", "英文", "你好世界!");
adapter.translate("英语","中文","hello world!");
}
}
六、总结
END:更多设计模式的介绍,推荐移步至👉 23种设计模式学习导航(Java完整版)👈
发表评论