当前位置: 代码网 > it编程>软件设计>设计模式 > 设计模式第9讲——适配器模式(Adapter)

设计模式第9讲——适配器模式(Adapter)

2025年09月20日 设计模式 我要评论
一、什么是适配器模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 当我们去国外旅游时,我们可能只会汉语,而当地人

一、什么是适配器模式

二、角色组成

三、优缺点

四、应用场景

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完整版)👈 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com