這次就不扯閑篇了,直接步入正題。 上一篇說到設(shè)計(jì)模式是四人幫(GOF)當(dāng)初在《設(shè)計(jì)模式-可復(fù)用的面向?qū)ο筌浖亍分兴岢龅?,書中一共?23 種模式用來解決面向?qū)ο蟮某绦蛟O(shè)計(jì)中所出現(xiàn)的各種問題。 當(dāng)時(shí)那本書中針對(duì)的語言是 C++,雖然后來設(shè)計(jì)模式也變成了 Java 語言的寵兒,但歸根結(jié)底只要是面向?qū)ο蟮恼Z言都有必要掌握這些套路。 像 C 語言、Shell 語言這樣主推面向過程的語言,設(shè)計(jì)模式就很少站出來說話了,沒辦法,誰讓現(xiàn)在主流的設(shè)計(jì)模式都是從以 Java 為主的項(xiàng)目經(jīng)驗(yàn)中抽象出來的呢。 但就像之前說的,只要是能面向?qū)ο蟮恼Z言,設(shè)計(jì)模式都起到了重要的作用,像 PHP、Python 這樣的腳本語言也不例外,設(shè)計(jì)模式也是一個(gè)合格碼農(nóng)應(yīng)該具備的技能。 以我最為熟悉的 Python 為例,很多人都是把它當(dāng)膠水語言,確實(shí),它用來做膠水語言是真的方便,這也導(dǎo)致了很多人用它的時(shí)候都是以面向過程的方式編程。 何況 Python 的入門門檻低,用起來更靈活,在項(xiàng)目開發(fā)中所占的比重小,多以輔助為目的,久而久之,設(shè)計(jì)模式在 Python 開發(fā)中總是不成體系(可能是我見的少了)。 但你想成為一個(gè)成熟的程序猿我覺得就絕不能忽視設(shè)計(jì)模式,具體原因還是戳我下面那篇文章好了。 話說回來,設(shè)計(jì)模式必須要是面向?qū)ο缶幊滩判?。?duì)于我們敲代碼的程序猿來說,使用設(shè)計(jì)模式,你就不能再從上到下的一條條去累加代碼了,但面向?qū)ο蟮暮?,是你將原來面向過程的代碼量縮減到原先的70%,甚至更少的時(shí)候才能體會(huì)到的。 具體到語言上,Python 和 Java 還是有很多不同的,影響最大的在我看來就是 Python 是所謂的無接口類型,定義接口將完全人為規(guī)定,在編程過程更需要自我約束,靈活是靈活,但多人合作的項(xiàng)目總不能全靠文檔說明和注釋去解釋你的意圖吧,相信效率的不滿意會(huì)讓你頭疼很長時(shí)間。 網(wǎng)上已經(jīng)有很多關(guān)于 Java 設(shè)計(jì)模式的文章書籍了,但是關(guān)于 Python 的文章書籍,雖然有很多大神也都提了,但是要么說的太不具體,要么總是站的高度太高,讓人摸不著頭腦。而這也是我做這個(gè)系列的原因。 害,廢話不多說。下面再和大家談?wù)勗O(shè)計(jì)模式的分類。 設(shè)計(jì)模式有低有高,低到日常的習(xí)慣技巧,高到框架架構(gòu),只要追究你在編程中的填坑原因,找到其中不變的部分,都可以歸到設(shè)計(jì)模式。 以現(xiàn)在主流的分類方法,按照設(shè)計(jì)模式的目的用途可將其分為三大類:創(chuàng)建型(Creational)、結(jié)構(gòu)型(Structural)和行為型(Behavioral)。 下面給大伙介紹一下分類后的設(shè)計(jì)模式。 創(chuàng)建型模式 這個(gè)類型的設(shè)計(jì)模式提供了創(chuàng)建對(duì)象的機(jī)制。這讓程序從根本上更具有靈活性和可復(fù)用性。
結(jié)構(gòu)型模式 這個(gè)類型的設(shè)計(jì)模式關(guān)注類和對(duì)象的組合,介紹了如何讓類和對(duì)象在組成更大的結(jié)構(gòu)同時(shí),還具有靈活和高效的特點(diǎn)。
行為模式 這個(gè)類型的設(shè)計(jì)模式負(fù)責(zé)對(duì)象間的通信,介紹了不同對(duì)象之間是怎樣交互和怎樣分配職責(zé)。
這么算下來,也有 22 種設(shè)計(jì)模式,Python 除了上面這些設(shè)計(jì)模式還有一些不是那么常見的模式,之后我也會(huì)補(bǔ)充過來,大家等著就好。 結(jié)尾 |
|