有一段时间最美翻译官占据了热搜

最美翻译官(适配器模式)_C

翻译,不仅仅是一项技术活儿。作为国际会议的翻译,这考验着一个人各方面的能力。

我这辈子是没有这机会为国家出一份力了。

不过写写文章,传播一下正能量,传播点儿知识的能力还是有的。

于是今天我们以翻译为例,讲一下:适配器设计模式。

一、他是啥

我们一般认为的适配器:适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连。

适配器模式是:为对象提供一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常规接口。

比如:dbcOdbcDriverInputStreamReader 、耳机转接头、高清线转接口、翻译等都是适配器模式

二、他长啥样

最美翻译官(适配器模式)_java_02

我们的用户准备使用"适配者“的功能,但是由于某种原因不能使用,但是用户可以使用”适配器",因为适配器通过组合把适配者放到自己类内,调用适配器的方法执行任务时,其实适配器是调用的适配者的方法。

三、他怎么工作

最美翻译官(适配器模式)_java_03

我不会英语,我说汉语,让翻译给外国人翻译成英语。

SpeakEnglish

package adapter;

/**
 * @author 木子的昼夜编程
 */
public class SpeakEnglish {
    public void listen(String eng) {
        System.out.println("老外听到:"+eng);
    }
}

TranslateEng2Chinese

package adapter;


/**
 * @author 木子的昼夜编程
 */
public class TranslateEng2Chinese {
    SpeakEnglish adaptee;
    public TranslateEng2Chinese(SpeakEnglish adaptee) {
        this.adaptee = adaptee;
    }

    // 翻译
    public void listen(String eng) {
        System.out.println("翻译听到:"+eng);
        // 进行翻译
        String res = translate(eng);
        adaptee.listen(res);
    }

    // 翻译
    private String translate(String eng) {
        // 我这个翻译官比较傻 只会那么几个词儿
        if("你好".equals(eng)) {
            return "hello!";
        }
        if("过来".equals(eng)) {
            return "come here!";
        }
        if("滚".equals(eng)) {
            return " get away~";
        }
        if("欢迎".equals(eng)) {
            return "welcome!";
        }
        return "I don't know what he said !";
    }
}

Test

package adapter;

/**
 * @author 木子的昼夜编程
 */
public class Test {
    public static void main(String[] args) {
        SpeakEnglish speakEnglish = new SpeakEnglish();
        TranslateEng2Chinese trans = new TranslateEng2Chinese(speakEnglish);
        // 你好
        trans.listen("你好");
        // 欢迎
        trans.listen("欢迎");
        // 滚
        trans.listen("滚");
        // 吃了吗
        trans.listen("吃了吗");
    }
}

最美翻译官(适配器模式)_适配器模式_04

四、唠唠

很明显我这个例子是从外到内,不是传统的那种从内到外。

不过不管是什么方向,只要是把一个不能识别的功能翻译成可以识别的,那就是适配了。

看过我其他文章的人可能说了,这跟装饰模式、代理模式有很像呀!

那你应该还看过我说过的一句话:学习设计模式不要纠结于他属于哪一种设计模式,你是中国人,你也是个好人。

你非要纠结是是中国人还是好人吗?

等你把所有设计模式的精髓都学到之后,你就会发现心中无剑,手中有剑,你写出来的代码已经使用了很多种设计模式,但是你没有刻意去设计。