有一段时间最美翻译官占据了热搜
翻译,不仅仅是一项技术活儿。作为国际会议的翻译,这考验着一个人各方面的能力。
我这辈子是没有这机会为国家出一份力了。
不过写写文章,传播一下正能量,传播点儿知识的能力还是有的。
于是今天我们以翻译为例,讲一下:适配器设计模式。
一、他是啥
我们一般认为的适配器:适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连。
适配器模式是:为对象提供一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常规接口。
比如:dbcOdbcDriver 、 InputStreamReader 、耳机转接头、高清线转接口、翻译等都是适配器模式
二、他长啥样
我们的用户准备使用"适配者“的功能,但是由于某种原因不能使用,但是用户可以使用”适配器",因为适配器通过组合把适配者放到自己类内,调用适配器的方法执行任务时,其实适配器是调用的适配者的方法。
三、他怎么工作
我不会英语,我说汉语,让翻译给外国人翻译成英语。
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("吃了吗");
}
}
四、唠唠
很明显我这个例子是从外到内,不是传统的那种从内到外。
不过不管是什么方向,只要是把一个不能识别的功能翻译成可以识别的,那就是适配了。
看过我其他文章的人可能说了,这跟装饰模式、代理模式有很像呀!
那你应该还看过我说过的一句话:学习设计模式不要纠结于他属于哪一种设计模式,你是中国人,你也是个好人。
你非要纠结是是中国人还是好人吗?
等你把所有设计模式的精髓都学到之后,你就会发现心中无剑,手中有剑,你写出来的代码已经使用了很多种设计模式,但是你没有刻意去设计。