日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 適配器模式 : 農村小伙娶烏克蘭美女語言不通 翻譯軟件立功

適配器模式 : 農村小伙娶烏克蘭美女語言不通 翻譯軟件立功

來源:程序員人生   發布時間:2016-10-22 13:56:30 閱讀次數:4837次

不知道甚么時候開始,總聽到“ XXX 小伙娶烏克蘭美女” 的新聞,比如 農村小伙娶烏克蘭美女語言不通 翻譯軟件立功 等等,我仔細地看了幾篇新聞,發現竟然不是標題黨,新聞里的烏克蘭妹子長得真不錯,上幾張圖:
這里寫圖片描述
這里寫圖片描述

看完這些新聞和照片,我心里有3個疑問;
1. 烏克蘭真的美女很多嗎?
2. 為何烏克蘭美女愛嫁給中國男人?
3. 翻譯軟件可以化腐朽為奇異,軟件開發進程中是不是可以參考呢?

經過我大量的研究,得出了答案:

1.烏克蘭真的美女很多嗎?

這里寫圖片描述

答:是的。
- 首先從世界地圖可以看到,烏克蘭地處東歐多個國家交界處,國內民族多達 110 個,各名族之間通婚比較多,長此以往致使混血美女比例比較高。
- 而且,烏克蘭的氣候環境也比較養人,1年到頭冷多熱少,陽光直射時間短,致使大多數女孩子皮膚白凈。
- 除另外,烏克蘭姑娘特別重視外表,打扮的比較精致時尚。

這里寫圖片描述

2.為何烏克蘭美女愛嫁給中國男人?

答:除主觀因素外,有兩點客觀因素很重要。
- 近年烏克蘭其實不富裕,距離大家心中的資本主義發達國家還有段距離。1方面生產停滯,經濟增長無力;另外一方面,烏克蘭還要面臨戰亂帶來的貨幣貶值、外資流出、物價上漲等壓力,財政“只出不進”,全部國家“干耗”外匯儲備。所以許多烏克蘭姑娘選擇外嫁。
- 另外,由于文化、社會福利等緣由,許多烏克蘭男人有酗酒、懶惰的習慣,而中國男人在國際上給人1種體貼、勤勞、顧家的形象,所以相較之下,中國男人是比較好的選擇。
這里寫圖片描述
這里寫圖片描述

3.翻譯軟件可以化腐朽為奇異,軟件開發進程中是不是可以參考呢?

翻譯軟件把小伙的漢語轉換成了烏克蘭語,在軟件開發進程中這就是1種“復用”!那有甚么設計模式可以到達這類效果呢?

我們先來摹擬實現下這個翻譯進程:

a.首先定義1個小目標,就是可以跟妹子說烏克蘭語,薩瓦迪卡愛米思油~

/** * 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) { //省略了復雜的語法翻譯進程,想象1下 mChinese.sayChinese(string); } }

d.可以看到,翻譯器持有1個只會中文小伙的援用,實現了說烏克蘭語的接口,在需要說烏克蘭語的時候,經過語法翻譯終究調用小伙的說中文:

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

e.翻譯 + 川普小伙 = 烏克蘭語達人,運行結果:
這里寫圖片描述

f.畫1下上面這個進程的 UML 圖:
這里寫圖片描述

  • 目標類,即能說烏克蘭語,是1個接口;
  • 實際情況,即只能說漢語,是1個既成的、沒法改變的類;
  • 中間人,即翻譯軟件,實現目標接口(烏克蘭語),援用了實際情況(中國小伙),經過移花接木,讓中國小伙具有了新的功能
  • Client 客戶端,烏克蘭妹子,希望能和會烏克蘭語的人溝通,由于翻譯軟件實現了烏克蘭語接口,因此可以直接實例化1個翻譯軟件作為烏克蘭語人。
@Test public void testAdapterPattern(){ Chinese me = new Chinese(); Ukrainian ukrainianMan = new Translator(me); ukrainianMan.sayUkrainian("我愛你"); }

這就是適配器模式,又稱包裝模式

定義

將1個類的接口轉換為客戶希望的另外一個接口。
適配器模式可使本來不兼容的接口變得兼容,即能復用。

1個很形象的例子

這里寫圖片描述

適配器模式主要分為兩種:類適配器和對象適配器

1.對象適配器,與被適配類是關聯關系

上面舉的例子就是適配器 。Adapter 中持有1個被適配類對象的援用,因此叫做對象適配器。
對象適配器的 UML 圖和上述例子1致,所以就偷個懶不列出來了。

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("劉奶奶找牛奶奶買榴蓮牛奶"); }

這里寫圖片描述

對照1下對象適配器的代碼:

/** * 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個被適配器對象,因此可以做到對多種被適配接口進行適配,而類適配器直接繼承,沒法動態修改,所以1般情況下對象適配器使用更廣泛。

使用處景:就是想復用,不想多創建!

  1. 通常在軟件開發后期或保護期使用,由于這個接口可能已投入使用,但是對新需求不太符合,我們希望盡量復用原有接口,所以用適配器進行包裝1下。
    .
  2. 或1開始設計不公道,功能類似,由于參數或名稱等細小緣由不能重用時,也能夠斟酌包裝1下。

《大話設計模式》里看到的1段話很好

  • 事前設計統1接口
  • 問題初現及時重構(下策)
  • 沒法改變只能適配(下下策)

后記

說起適配器 Adapter,最熟習的就是 ListView 和 RecyclerVIew 的適配器了,本來準備下1篇就寫 ListVIew 源碼中的適配器模式,但斟酌到 ListView 中還有視察者模式,所以下1步先總結視察者模式,然后再統1進行 ListView 源碼解析


適配器模式和代理模式的區分

從我們這兩個設計模式調用的方法可以看出來:

  1. 適配器模式調用時強調“終究要轉換成的目的接口”,以本文例子,Translator 終究的目的是變成1個 Ukrainian :
    Ukrainian ukrainianMan = new Translator(me);
    然后客戶端調用的是 Ukrainian 的方法
  2. 而代理模式是通過代理,攔截調用,終究以代理類完成工作,以我這篇文章http://blog.csdn.net/u011240877/article/details/52264283 為例 :
    Agent songJJ = new Agent(baoqiang, false);

總結:

適配器模式以到達適配終究接口為目的,
代理模式以攔截、處理為目的。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美不卡在线 | www精品美女久久久tv | 毛片视频播放 | 能在线看的av| 久久久久国产一区二区 | 在线看一区二区 | 一二三四区在线观看 | 99视频在线免费观看 | 国产片一区二区三区 | 亚洲精品高清在线 | 日日日日日 | 91在线视频导航 | 天堂成人国产精品一区 | 真人一级毛片视频 | 久久有精品 | 亚洲午夜小视频 | 五月综合激情网 | 国产1区2区3区在线观看 | 免费网站污 | 日韩欧美手机在线 | 999国产视频 | 成人av毛片| 色淫网站 | 久久久久久久久99精品大 | 国产69精品久久久久毛片 | 国产一区精品在线 | 在线日韩欧美 | 不卡视频一区二区三区 | 国产91在线播放精品91 | 最近的中文字幕在线看 | 国产精品一区二区三区在线 | 寡妇一级毛片免费看 | 国产一区二区三区免费观看在线 | 免费国产视频 | 激情av在线| 精品国产一区二区三区免费 | 国产精品亚洲综合 | 青草网 | 国产扒开脚做爽爽爽天美传媒 | 欧美电影一区二区三区 | 亚洲精品久久久久久一区二区 |