多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

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

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

不知道甚么時候開始,總聽到“ 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);

總結:

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产成人精品综合久久久 | 欧美精品 在线观看 | 精品亚洲成a人在线观看 | 国产福利片在线观看 | 午夜久久网 | 最近手机中文字幕高清1 | 一区二区三区四区精品 | 大香线蕉97久久 | 五月香婷婷 | 国内精品视频九九九九 | 亚洲国产欧美国产第一区二区三区 | 中文字幕国产在线 | 亚洲免费中文 | 四色网站 | 真实男女xx00动态视频120秒 | 欧美一级手机免费观看片 | 国内亚州视频在线观看 | 午夜在线播放视频在线观看视频 | 欧美在线看片 | 欧美一级爱操视频 | 亚洲一区2区三区4区5区 | 免费欧洲毛片a级视频 | 亚洲综合亚洲综合网成人 | 国产精品国产三级国产爱网 | 国产在线精品一区二区高清不卡 | 日产免费线路一区二区三区 | 久久综合九色综合欧美狠狠 | 欧美亚洲桃花综合 | 国产做人爱三级视频在线 | 国产一级特黄aaaa大片野外 | 国产一区二区亚洲精品天堂 | 中文字幕第315页 | 久久久精品3d动漫一区二区三区 | 一国产一级淫片a免费播放口 | 亚洲国产精品成人久久 | a天堂影院 | 最新中文字幕在线视频 | 欧美日本一道高清免费3区 欧美日本一道免费一区三区 | 一级精品视频 | 国产人做人爱免费视频 | 婷婷色一二三区波多野衣 |