适配器模式 : 农村小伙娶乌克兰美女语言不通 翻译软件立功

不知道什么时候开始,总听到“ XXX 小伙娶乌克兰美女” 的新闻,比如 农村小伙娶乌克兰美女语言不通 翻译软件立功 等等,我仔细地看了几篇新闻,发现居然不是标题党,新闻里的乌克兰妹子长得真不错,上几张图:

看完这些新闻和照片,我心里有三个疑问;

1. 乌克兰真的美女很多吗?

2. 为什么乌克兰美女爱嫁给中国男人?

3. 翻译软件可以化腐朽为神奇,软件开发过程中是否可以参考呢?

经过我大量的研究,得出了答案:

1.乌克兰真的美女很多吗?

答:是的。

- 首先从世界地图可以看到,乌克兰地处东欧多个国家交界处,国内民族多达 110 个,各名族之间通婚比较多,久而久之导致混血美女比例比较高。

- 而且,乌克兰的气候环境也比较养人,一年到头冷多热少,阳光直射时间短,导致大多数女孩子皮肤白皙。

- 除此外,乌克兰姑娘特别注重外表,打扮的比较精致时尚。

2.为什么乌克兰美女爱嫁给中国男人?

答:除主观因素外,有两点客观因素很重要。

- 近些年乌克兰并不富裕,距离大家心中的资本主义发达国家还有段距离。一方面生产停滞,经济增长无力;另一方面,乌克兰还要面临战乱带来的货币贬值、外资流出、物价上涨等压力,财政“只出不进”,整个国家“干耗”外汇储备。所以许多乌克兰姑娘选择外嫁。

- 此外,由于文化、社会福利等原因,许多乌克兰男人有酗酒、懒散的习惯,而中国男人在国际上给人一种体贴、勤劳、顾家的形象,所以相较之下,中国男人是比较好的选择。

3.翻译软件可以化腐朽为神奇,软件开发过程中是否可以参考呢?

翻译软件把小伙的汉语转换成了乌克兰语,在软件开发过程中这就是一种“复用”!那有什么设计模式可以达到这种效果呢?

我们先来模拟实现下这个翻译过程:

a.首先定义一个小目标,就是可以跟妹子说乌克兰语,萨瓦迪卡爱米思油~

/**
 * description:目标:说乌克兰语
 * <br/>
 * author: shixinzhang
 * <br/>
 * data: 9/18/2016
 */
public interface Ukrainian {
    /**
     * 说乌克兰语,比如:Я люблю тебя
     * @param string
     */
    void sayUkrainian(String string);
}

b.然而理想很丰满,现实很骨感,小伙只会川普:

/**
 * description:实际情况:只会中文
 * <br/>
 * author: shixinzhang
 * <br/>
 * data: 9/18/2016
 */
public class Chinese {
    /**
     * 说中文,比如:刘奶奶找牛奶奶买榴莲牛奶
     * @param string
     */
    void sayChinese(String string) {
        System.out.println("【中文版】 " + string);
    }
}

c.这时候翻译器上场了,化腐朽为神器,帮助小伙具有能说乌克兰语的功能:

/**
 * description:翻译
 * <br/>
 * author: shixinzhang
 * <br/>
 * data: 9/18/2016
 */
public class Translator implements Ukrainian {
    private Chinese mChinese;

    public Translator(Chinese chinese) {
        mChinese = chinese;
    }

    @Override
    public void sayUkrainian(String string) {
        //省略了复杂的语法翻译过程,想象一下
        mChinese.sayChinese(string);
    }
}

d.可以看到,翻译器持有一个只会中文小伙的引用,实现了说乌克兰语的接口,在需要说乌克兰语的时候,经过语法翻译最终调用小伙的说中文:

@Test
    public void testAdapterPattern(){
        Chinese me = new Chinese();
        Ukrainian ukrainianMan = new Translator(me);
        ukrainianMan.sayUkrainian("我爱你");
    }

e.翻译 + 川普小伙 = 乌克兰语达人,运行结果:

f.画一下上面这个过程的 UML 图:

  • 目标类,即能说乌克兰语,是一个接口;
  • 实际情况,即只能说汉语,是一个既成的、无法改变的类;
  • 中间人,即翻译软件,实现目标接口(乌克兰语),引用了实际情况(中国小伙),经过偷梁换柱,让中国小伙具有了新的功能
  • Client 客户端,乌克兰妹子,希望能和会乌克兰语的人沟通,由于翻译软件实现了乌克兰语接口,因此可以直接实例化一个翻译软件作为乌克兰语人。
@Test
    public void testAdapterPattern(){
        Chinese me = new Chinese();
        Ukrainian ukrainianMan = new Translator(me);
        ukrainianMan.sayUkrainian("我爱你");
    }

这就是适配器模式,又称包装模式

定义

将一个类的接口转换为客户希望的另一个接口。

适配器模式可以使原本不兼容的接口变得兼容,即能复用。

一个很形象的例子

适配器模式主要分为两种:类适配器和对象适配器

1.对象适配器,与被适配类是关联关系

上面举的例子就是适配器 。Adapter 中持有一个被适配类对象的引用,因此叫做对象适配器。

对象适配器的 UML 图和上述例子一致,所以就偷个懒不列出来了。

2.类适配器,与被适配类是继承关系

Adapter 通过继承被适配类,从而可以调用被适配类的方法。

举个栗子,类适配器下的翻译中介:

/**
 * description: 类适配器下的翻译中介
 * <br/>
 * author: shixinzhang
 * <br/>
 * data: 9/20/2016
 */
public class ClassTranslator extends Chinese implements Ukrainian {
    @Override
    public void sayUkrainian(String string) {
        sayChinese(string);
    }
}

采用类适配器模式的翻译软件,继承了被适配类 Chinese,实现了目标接口 Ukrainian,从而使得原本不能使用的 sayChinese(string) 方法可以被调用。

调用时:

    @Test
    public void testClassAdapterPattern(){
        Ukrainian ukrainianMan = new ClassTranslator();
        ukrainianMan.sayUkrainian("刘奶奶找牛奶奶买榴莲牛奶");
    }

对比一下对象适配器的代码:

/**
 * description: 翻译
 * <br/>
 * author: shixinzhang
 * <br/>
 * data: 9/18/2016
 */
public class Translator implements Ukrainian {
    private Chinese mChinese;

    public Translator(Chinese chinese) {
        mChinese = chinese;
    }

    @Override
    public void sayUkrainian(String string) {
        mChinese.sayChinese(string);
    }
}

可以看到,对象适配器支持传入一个被适配器对象,因此可以做到对多种被适配接口进行适配,而类适配器直接继承,无法动态修改,所以一般情况下对象适配器使用更广泛。

使用场景:就是想复用,不想多创建!

  1. 通常在软件开发后期或者维护期使用,因为这个接口可能已经投入使用,但是对新需求不太符合,我们希望尽可能复用原有接口,所以用适配器进行包装一下。

    .

  2. 或者一开始设计不合理,功能相似,由于参数或者名称等细小原因不能重用时,也可以考虑包装一下。

《大话设计模式》里看到的一段话很好

  • 事先设计统一接口
  • 问题初现及时重构(下策)
  • 无法改变只能适配(下下策)

后记

说起适配器 Adapter,最熟悉的就是 ListView 和 RecyclerVIew 的适配器了,本来准备下一篇就写 ListVIew 源码中的适配器模式,但考虑到 ListView 中还有观察者模式,所以下一步先总结观察者模式,然后再统一进行 ListView 源码解析


适配器模式和代理模式的区别

从我们这两个设计模式调用的方法可以看出来:

  1. 适配器模式调用时强调“最终要转换成的目的接口”,以本文例子,Translator 最终的目的是变成一个 Ukrainian :

    Ukrainian ukrainianMan = new Translator(me);

    然后客户端调用的是 Ukrainian 的方法

  2. 而代理模式是通过代理,拦截调用,最终以代理类完成工作,以我这篇文章http://blog.csdn.net/u011240877/article/details/52264283 为例 :

    Agent songJJ = new Agent(baoqiang, false);

总结:

适配器模式以达到适配最终接口为目的,

代理模式以拦截、处理为目的。

代码地址点这里

时间: 2024-07-30 12:41:44

适配器模式 : 农村小伙娶乌克兰美女语言不通 翻译软件立功的相关文章

一个农村小伙网上创业如何年入百万

我叫安东胜,原名安江江,是一个普通的农村人,因为家里条件不好中专没毕业就辍学了,想着早点出校门学门手艺赚钱补贴家用.1999年,我修过摩托车.摆过水果摊.建筑工地当过民工,甚至捡过垃圾,只要不违法能赚钱的事情都去做了,可到了年底发现没赚到钱, [人生的第一个转折点] 后来跟着和我一样有梦想的小伙伴就外出打工了,我做劳务输出的姑父,给我的建议是,你必须要找和人打交道的工作,而其他的小伙伴都去沿海的工厂里面上班,我被送到北京房山区燕山石化当一名保安,记得2001年北京的冬天非常冷,夜里经常刮大风,我

农村小伙善于发现商机,创立网站成为业内领军人物

1997年,孙德良在杭州创办中国化工网,其后又创办了全球化工网.中国纺织网.中国医药网等行业网站,最终在2006年12月创造了"中国互联网第一股"网盛科技. 孙德良,1972年出生,老家在浙江萧山的农村,父母都是农民.他1995年毕业于沈阳工业大学计算机专业. 一天,他在一个朋友办公室看到一堆化工企业的名片.对于无心者,这只是名片而已; 但孙德良看到的是资源.他一拍脑袋,随即决定将创业目标转向做化工专业网站.1997年,孙德良在杭州创办中国化工网. 1997年11月,孙德良抱着一台用向

借钱起家的农村小伙,化身电商达人后成为名副其实百万富翁

说起湖北农村电商,不得不提"湖北淘宝第一村"--下营村:说起下营村,不得不说这个村的电商达人蒋家明. 一次偶然的机会,26岁的蒋家明从同学那里得知绿松石在拉萨很受欢迎,而自己的家乡正好盛产绿松石,于是蒋家明毅然辞去在当地汽配城的工作,来到拉萨,一边在同学的绿松石店里帮忙,一边学习有关绿松石的知识. 2012年初,蒋家明拿着东拼西凑的2万元钱,在拉萨开了一家经营绿松石的店铺.随着当地旅游业的发展,短短几个月,他就赚回了开店的成本,淘到人生的第一桶金. 勤奋好学的蒋家明并没有满足现状,一次

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

《欧美美女漫谈》

本文地址:http://www.cnblogs.com/aiweixiao/p/7434548.html 原文地址: http://t.cn/R9g3RV6 2017-08-08 微信号wozhuzaisi 程序员的文娱情怀 引子 说起来美女,大家都是喜欢的,我也写过几篇过于美女的文章,我个人而言,还是觉得黄皮肤黑眼睛的亚洲女人好看,至于金发碧眼的欧美美女,我是欣赏不了的,总感觉非我族类的感觉,极少有给我特别或惊艳,或清纯的感觉,婉约,羞涩更是与她们是绝缘的. 欧美美女-加拿大美女寇碧·史莫德斯

适配器模式 - 设计模式学习

适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 在软件开发中,系统的数据行为都正确,但接口不符,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 下面给出适配器模式的UML图: 下面来看下适配器模式的代码结构图: namespace ConsoleApplication1 { //Targe

娶越南媳妇,到底靠不靠谱?

越南媳妇即便有想外嫁的,也不会奔着中国光棍这样的贫困群体 当然,据说中国比越南富很多,越南女性由于贫困还是有很多想嫁到中国.的确,女性向富裕地区婚嫁是普世现象,中国也曾发生外嫁港台日韩欧美的热潮.1999年,中国某市的涉外婚姻婚检就达1400对,估算当年外嫁女性占实际出嫁人数的四分之一以上. 然而近年来,随着中国对外开放的深化,外嫁现象反而减少,各地都在报道"涉外婚姻逐年下降".以广州为例,涉外婚姻(以外嫁为主)每年以200多对的速度在匀速下降,且结婚双方年龄差距在缩小.学历在增高.说

转载-从信息论角度论证为什么汉语是世界上最先进的语言--引用多项实验数据

[转载]从信息论角度论证为什么汉语是世界上最先进的语言–引用多项实验数据 作者:汉语计算机应用研究小组(笔名:冷酷的哲学?) 一.语言水平高低的评判准则 口语,实际上是一种通讯协议.就是说,语言实际上是把人的思想通过发音器官变成一串频率不同.波形不同的声波,然后被另一个体的听觉器官和相关的脑部组织重新转变回思想.通讯协议,就是一个规则,一个规定了应该如何把思想/信息转变为易于传输的信号的规则 计算机上,通讯协议有两个基本评判标准:[传输效率]和[抗噪能力] 传输效率:在单位时间里,按照该通讯协议

Microsoft Translator:打破语言障碍 拓展全球沟通新机遇

作者:Olivier Fontana, 微软研究院Microsoft Translator产品战略总监 世界越来越小,全球协作.共同创新已经成为常态.在微软研究院,我们对此尤为感同身受--从北京到雷德蒙,从剑桥到班加罗尔,全球范围内的无边界沟通与协作是我们科研合作与产品创新的关键基础.全球一体化带来的发展机遇应该属于每个人,为了帮助全球各地的人们跨越语言的障碍,实现高效沟通与广泛协作,我们带来了Microsoft Translator. Microsoft Translator是微软以机器学习.