欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

編程故事之python的設(shè)計(jì)模式

系統(tǒng) 2237 0

編程故事之python的設(shè)計(jì)模式_第1張圖片

?

在遙遠(yuǎn)的Python王國(guó),有一位少年,非常熱愛(ài)編程,他的父母想給他報(bào)一個(gè)班,問(wèn)了萬(wàn)能的朋友圈以后,發(fā)現(xiàn)大家都推薦同一個(gè)老師,人稱(chēng)吉先生。

于是他的父母毫不猶豫就交了一筆不菲的學(xué)費(fèi),每周六日下午讓孩子去學(xué)習(xí)。

少年學(xué)習(xí)非常刻苦,很快就學(xué)會(huì)了Python語(yǔ)法、工具和框架。

老師像是見(jiàn)到了可以雕刻的美玉,傾囊相授,告 訴他不僅要把代碼寫(xiě)對(duì),還要讓代碼漂亮、優(yōu)雅、可讀、可維護(hù)。

少年又學(xué)會(huì)了單元測(cè)試、TDD、重構(gòu),努力讓自己的代碼達(dá)到老師所要求的標(biāo)準(zhǔn)。

他還把“Python 之禪”貼在了自己的墻上,經(jīng)常對(duì)照自己的代碼,從來(lái)都不敢違反。

The Zen of Python, by Tim Peters

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. ......

三年以后,少年以為自己成為了Python的大師,直到有一天,老師給他布置了一個(gè)大作業(yè),其實(shí)是個(gè)大項(xiàng)目,業(yè)務(wù)非常復(fù)雜。

少年通宵達(dá)旦地編程,可他悲慘地發(fā)現(xiàn),無(wú)論他怎么努力,他的代碼都是亂糟糟的,沒(méi)有美感,他所寫(xiě)出的類(lèi),模塊混成了一團(tuán)。

于是他只好去請(qǐng)教老師: “老師,我的Python和Flask框架已經(jīng)用得滾瓜爛熟了,為什么完成不了這個(gè)項(xiàng)目呢?”

老師說(shuō):“孩子,原來(lái)你只需要把框架的類(lèi)給import進(jìn)來(lái),稍微寫(xiě)點(diǎn)兒代碼就行了,現(xiàn)在你需要自己去設(shè)計(jì)類(lèi),自己去做出抽象了!”

“怎么設(shè)計(jì)呢?”

“為師送你一本古書(shū)《設(shè)計(jì)模式》,你回去好好看看吧。”

少年如獲至寶, 廢寢忘食地去研究這本20多年前出的、泛黃的古書(shū),還是用C++描述的。

他看得云里霧里,似乎明白,又似乎不明白,只好再去請(qǐng)教老師。

這一次,老師給了他另外一本書(shū)《Head First 設(shè)計(jì)模式》。少年翻開(kāi)一看,這本書(shū)是用Java寫(xiě)的,于是又一頭扎到了Java語(yǔ)言當(dāng)中。

這本書(shū)比較通俗易懂,少年看得大呼過(guò)癮。

終于,他信心十足地用Python開(kāi)始那個(gè)大項(xiàng)目了。

他用Python語(yǔ)言實(shí)現(xiàn)設(shè)計(jì)模式,解決一些設(shè)計(jì)問(wèn)題,可是總覺(jué)得不對(duì)勁,和Java 、C++相比,感覺(jué)怪怪的。

另外他感覺(jué)到了動(dòng)態(tài)語(yǔ)言的不爽之處,每次想重構(gòu)的時(shí)候,總是不敢下手,他把困惑給老師說(shuō)了。

老師笑道:“我在Java王國(guó)的時(shí)候,人們總是說(shuō)‘動(dòng)態(tài)一時(shí)爽,重構(gòu)火葬場(chǎng)’, 現(xiàn)在你體會(huì)到了吧!”

“Java就能避免這個(gè)問(wèn)題嗎?”

“Java是一門(mén)靜態(tài)語(yǔ)言,變量類(lèi)型一旦確定就不能改變,對(duì)重構(gòu)的支持非常好,你有沒(méi)有興趣去看看?那里有很多的框架,像Spring、Spring Boot、MyBatis、Dubbo、Netty,非常繁榮發(fā)達(dá)。”

少年心生向往,于是老師就給他寫(xiě)了個(gè)條子,告訴他說(shuō)到了Java王國(guó),找到IO大臣,一切事情都會(huì)暢通無(wú)阻。

少年辭別老師,奔向了Java帝國(guó),老師整了整衣冠, 望著東方Java帝國(guó)的方向,莊嚴(yán)地拜了三拜:“五年了,IO大人,我沒(méi)有辜負(fù)您的重托,又忽悠了一個(gè)人去做Java了!”

原來(lái)這位老師就是吉森! IO大臣派來(lái)傳播Java文化和價(jià)值觀的傳教士,入境后不幸被識(shí)破,軟禁在了Python王國(guó)。

Python沒(méi)有接口?

Python國(guó)王收到邊關(guān)的奏報(bào),說(shuō)是最近有不少年輕人奔向了Java王國(guó),不知道是不是國(guó)內(nèi)政策有變,導(dǎo)致人心浮動(dòng)。

Python國(guó)王震怒,下令嚴(yán)查。 查來(lái)查去,所有的線(xiàn)索都指向了一個(gè)人:吉森。

這一天,Python特使帶著士兵來(lái)到了吉森的住所,果然發(fā)現(xiàn)他又在忽悠年輕人了。

特使又氣又笑:“你學(xué)了半吊子的Python,居然敢來(lái)蠱惑人心,實(shí)在是可笑。”

吉森看到自己的計(jì)謀已被識(shí)破,依然很鎮(zhèn)靜:“大人誤會(huì)了,我教的就是正宗的面向?qū)ο蟮脑O(shè)計(jì)和設(shè)計(jì)模式啊,這設(shè)計(jì)模式用Python實(shí)現(xiàn)起來(lái)很別扭,我就推薦他們?nèi)W(xué)Java啊。”

“胡說(shuō),Python寫(xiě)設(shè)計(jì)模式怎么會(huì)很別扭? Java 由于語(yǔ)法所限,表達(dá)能力比較弱,對(duì)于一些問(wèn)題,只好用笨拙的設(shè)計(jì)模式來(lái)解決,我們Python有可能在語(yǔ)法層面就解決問(wèn)題了!”

“那你說(shuō)說(shuō),設(shè)計(jì)模式的原則是什么?” 吉森問(wèn)道。

1. 面向接口編程,而不是面向?qū)崿F(xiàn)編程。2. 優(yōu)先使用組合而不是繼承。 ” 這是難不住特使的。

“Python連接口都沒(méi)有,怎么面向接口編程?” 吉森問(wèn)道。

特使哈哈大笑:“說(shuō)你是半吊子吧,你還不服,你以為這里的接口就是你們Java的interface啊!你忘了Python的 Duck Typing 了?”

編程故事之python的設(shè)計(jì)模式_第2張圖片

?

)

“看到?jīng)]有, Duck和Airplane都沒(méi)有實(shí)現(xiàn)你所謂的接口,但是都可以調(diào)用fly()方法,這難道不是面向接口編程, 如果你非要類(lèi)比的話(huà),這個(gè)fly就是一個(gè)自動(dòng)化的接口啊。”

吉森確實(shí)沒(méi)想到這一層,至于第二個(gè)原則,優(yōu)先使用組合而不是繼承,可以是每個(gè)面向?qū)ο蟮恼Z(yǔ)言都可以實(shí)現(xiàn)的,他嘆了口氣,也就不問(wèn)了。

?

一、Adapter模式

特使接著說(shuō):“Duck Typing非常強(qiáng)大,你不是提到了設(shè)計(jì)模式嗎,在Duck Typing面前,很多設(shè)計(jì)模式純屬多此一舉。我來(lái)給你舉個(gè)例子,Adapter模式。假設(shè)客戶(hù)端有這么一段代碼,可以把一段日志寫(xiě)入文件當(dāng)中。”

編程故事之python的設(shè)計(jì)模式

?

?

“現(xiàn)在來(lái)了新的需求,要把日志寫(xiě)入數(shù)據(jù)庫(kù), 而數(shù)據(jù)庫(kù)并沒(méi)有write 方法,怎么辦? 那就寫(xiě)個(gè)Adapter吧。”

編程故事之python的設(shè)計(jì)模式_第3張圖片

?

?

“注意這個(gè)DBAdapter并不需要實(shí)現(xiàn)什么接口(我大Python也沒(méi)有接口),就是一個(gè)單獨(dú)的類(lèi),只需要有個(gè)write方法就可以了。”

編程故事之python的設(shè)計(jì)模式

?

?

確實(shí)是很簡(jiǎn)單,只要有write 方法, 不管你是任何對(duì)象,都可以進(jìn)行調(diào)用, 典型的Duck Typing 。

既然Adapter可以這么寫(xiě),那Proxy模式也是類(lèi)似了,只要你的Proxy類(lèi)和被代理的類(lèi)的方法一樣,那就可以被客戶(hù)使用。

但是這種方法的弊端就是,不知道log方法的參數(shù)類(lèi)型,想要重構(gòu)可就難了。

?

2、單例模式

?

吉森又想到了一個(gè)問(wèn)題,繼續(xù)挑戰(zhàn)特使:“Python連個(gè)private 關(guān)鍵字都沒(méi)有,怎么隱藏一個(gè)類(lèi)的構(gòu)造函數(shù),怎么去實(shí)現(xiàn)單例?”

特使不屑地說(shuō):“忘掉你那套Java思維吧,在Python中想寫(xiě)個(gè)Singleton有很多辦法,我給你展示一個(gè)比較Python的方式,用module的方式來(lái)實(shí)現(xiàn)。”

編程故事之python的設(shè)計(jì)模式_第4張圖片

?

?

使用Singleton:

編程故事之python的設(shè)計(jì)模式

?

?

吉森確實(shí)沒(méi)有想到這種寫(xiě)法,利用Python的module來(lái)實(shí)現(xiàn)信息的隱藏。

?

三、Visitor模式

?

不是每個(gè)設(shè)計(jì)模式都能這么干吧? 吉森心中暗想,他腦海中浮現(xiàn)了一個(gè)難于理解的模式:Visitor,自己當(dāng)初為了學(xué)習(xí)它可是下了苦工。

吉森說(shuō):“那你說(shuō)說(shuō),對(duì)于Visitor,怎么利用Python的特色?”

“我知道你心里想的是什么,無(wú)非就是想讓我寫(xiě)一個(gè)類(lèi),然后在寫(xiě)個(gè)Visitor對(duì)它進(jìn)行訪(fǎng)問(wèn),是不是?”

編程故事之python的設(shè)計(jì)模式_第5張圖片

?

?

吉森說(shuō):“是啊, 難道Visitor模式不是這么寫(xiě)的嗎? ”

"我就說(shuō)你的Python只是學(xué)了點(diǎn)皮毛吧,Visitor的本質(zhì)是在分離結(jié)構(gòu)和操作, 在Python中使用 generator 可以更加優(yōu)雅地實(shí)現(xiàn)。”

編程故事之python的設(shè)計(jì)模式_第6張圖片

?

?

不得不承認(rèn),這種方式使用起來(lái)更加簡(jiǎn)潔,同時(shí)達(dá)到了結(jié)構(gòu)和操作進(jìn)行分離的目的。

特使說(shuō)道: “看到了吧,Python在語(yǔ)言層面對(duì)一些模式提供了支持,所以很多設(shè)計(jì)模式在我大Python看起來(lái)非常笨拙,我們這里并不提倡,當(dāng)然我們還是要掌握面向?qū)ο笤O(shè)計(jì)的原則SOLID和設(shè)計(jì)模式的思想,發(fā)現(xiàn)變化并且封裝變化,這樣才能寫(xiě)出優(yōu)雅的程序出來(lái)。”

吉森嘆了一口氣,感慨自己學(xué)藝不精,不再反抗,束手就擒。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲自拍色 | 白色白色视频免费观看 | av一区二区三区四区 | 国产超级乱淫视频播放 | 2022国产成人福利精品视频 | 亚洲美女在线播放 | 欧美高清正版在线 | 99久久99热久久精品免费看 | 99精品一区二区 | 亚洲婷婷综合网 | 亚洲成人福利在线观看 | 奇米影视7777久久精品人人爽 | 日韩艹| 一级做a爰片久久毛片唾 | 无码免费人妻A片AAA毛片一区 | jizzjizzjizz亚洲18| 亚洲精品国产福利在线观看 | 婷婷久月 | 久久久久国产成人精品亚洲午夜 | 色综合激情 | 久久久久久久国产精品毛片 | 无码又黄又爽又舒服的A片 综合久久网 | 久久艹逼 | 亚洲精品一区在线观看 | 成人在线小视频 | 欧美日韩操 | 国产在线视频自拍 | a级毛片在线免费观看 | 久久精品免费网站 | 国产精品三级在线播放 | 91视频.com | 亚洲日本久久久午夜精品 | 清纯唯美亚洲激情 | 成年视频在线观看免费 | 日本夜爽爽一区二区三区 | 国产精品综合色区在线观看 | 亚洲伊人成色综合网 | 亚洲高清在线观看看片 | 欧美日韩一二三区 | 亚洲精品无码成人A片九色播放 | 黄片一级毛片 |