在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 什么是設(shè)計(jì)模式
中介者模式
MVVM
亨元模式
設(shè)計(jì)模式分類概覽表
ES Harmony
組合模式
CommonJS
jQuery 插件的設(shè)計(jì)模式
外觀模式
觀察者模式
建造者模式
構(gòu)造器模式
外觀模式
簡介
AMD
原型模式
設(shè)計(jì)模式的分類
觀察者模式
命名空間模式
代理模式
編寫設(shè)計(jì)模式
適配器模式
反模式
什么是設(shè)計(jì)模式
模塊化模式
MVC
Mixin 模式
裝飾模式
設(shè)計(jì)模式的結(jié)構(gòu)
單例模式
迭代器模式
命令模式
工廠模式
MVP
暴露模塊模式
惰性初始模式

什么是設(shè)計(jì)模式

一個模式就是一個可重用的方案,可應(yīng)用于在軟件設(shè)計(jì)中的常見問題 - 在我們的例子里 - 就是編寫JavaScript的web應(yīng)用程序。模式的另一種解釋就是一個我們?nèi)绾谓鉀Q問題的模板 - 那些可以在許多不同的情況里使用的模板。 那么理解和熟悉模式為什么是如此的重要?設(shè)計(jì)模式有以下三點(diǎn)好處:

  • 模式是行之有效的解決方法:他們提供固定的解決方法來解決在軟件開發(fā)中出現(xiàn)的問題,這些都是久經(jīng)考驗(yàn)的反應(yīng)了開發(fā)者的經(jīng)驗(yàn)和見解的使用模式來定義的技術(shù)。
  • 模式可以很容易地重用:一個模式通常反映了一個可以適應(yīng)自己需要的開箱即用的解決方案。這個特性讓它們很健壯。
  • 模式善于表達(dá):當(dāng)我們看到一個提供某種解決方案的模式時,一般有一組結(jié)構(gòu)和詞匯可以非常優(yōu)雅地幫助表達(dá)相當(dāng)大的解決方案。

模式不是一個確切的解決方案。我們要記住模式的角色僅僅是給我們提供一個解決方案。模式不能解決所有的設(shè)計(jì)問題,也不能代替優(yōu)秀的軟件設(shè)計(jì)師。然而,它們在幫助我們。接下來我們將看看模式必須提供的其他的一些優(yōu)勢。

  • 模式的重用可以幫助防止在應(yīng)用程序開發(fā)過程中出現(xiàn)的一些可能導(dǎo)致重大問題的小問題。這意味著當(dāng)代碼是建立在行之有效的模式上時,我們可以花更少的時間去關(guān)心我們的代碼結(jié)構(gòu),從而能花更多的時間關(guān)注我們的解決方案的整體質(zhì)量。這是因?yàn)槟J娇梢怨膭钗覀冊诟玫慕Y(jié)構(gòu)化和有組織的方式下編碼,這將避免在未來由于清潔的目的而去重構(gòu)它。
  • 模式可以提供一個不需要綁定到一個特定問題的書面的概括性的解決方案。這個廣義的方法意味著不用管我們正在處理的應(yīng)用程序 (許多情況下的編程語言) 設(shè)計(jì)模式的應(yīng)用可以提高我們的代碼的結(jié)構(gòu)。
  • 某些模式可以通過避免重復(fù)來減小我們代碼的文件大小。通過鼓勵開發(fā)者更仔細(xì)地看待他們的解決方案來減少重復(fù)的地方,如通過將類似的執(zhí)行流程作為一個一般性的函數(shù)來減少函數(shù)的數(shù)量,這樣我們就可以減小代碼庫的總體大小,這也成為使代碼更DRY。
  • 模式增加了開發(fā)者的詞匯,這使得交流更快速。
  • 經(jīng)常使用的模式可通過收集其他使用這些模式的開發(fā)人員貢獻(xiàn)給設(shè)計(jì)模式社區(qū)的經(jīng)驗(yàn)來改進(jìn)。在某些情況下,這將導(dǎo)致全新模式的創(chuàng)建,同時也可以提供改進(jìn)的指導(dǎo)大家如何使用特定的模式才是最好的。這可以確?;谀J降慕鉀Q方案繼續(xù)變得比特別的解決方案更健壯。

我們已經(jīng)每天都在使用模式

為了了解模式有多有用,讓我們看看jQuery提供給我們的一個很簡單的元素選擇問題。 假設(shè)我們有一個為頁面上每一個class為"foo"的DOM元素添加一個計(jì)數(shù)器的腳本,什么才是查詢這個元素的集合的最有效的方法呢?有幾種不同的方法可以解決這個問題:

選擇頁面上所有的元素并存儲它們的引用,然后使用正則表達(dá)式 (或其他方式) 來過濾這個集合中那些class為"foo"的元素的引用。

  • 使用像asquerySelectorAll()的現(xiàn)代原生瀏覽器的特性,來選擇所有的class為"foo"的元素。
  • 使用像asgetElementsByClassName()的原生特性同樣可以獲取期望的集合。

那些,這些選擇哪個是最快的呢?實(shí)際上第三個,比其他的替代選擇快 8-10倍。但在實(shí)際的應(yīng)用程序中,第三個選擇無法在Internet Explorer 9以下的版本中使用,從而只能使用第一個,第二個和第三個都不支持。

使用jQuery的開發(fā)人員就不必?fù)?dān)心這個問題,因?yàn)楹苄疫\(yùn)的是它使用Facade模式把這個問題抽象了出來。正如我們即將在后面更詳細(xì)的介紹的那樣,這種模式提供了一組簡單的對更復(fù)雜的底層代碼的抽象接口 (例如$el.css(),$el.animate()) 。正如我們所看到的,這意味著我們只會對實(shí)現(xiàn)級別的細(xì)節(jié)花費(fèi)更少的時間。

在其后,庫會根據(jù)我們當(dāng)前瀏覽器的支持自動選擇最優(yōu)的方法來選擇元素,我們只使用抽象層。

我們可能都熟悉jQuery的$("selector"),這是更容易使用的在一個頁面選擇HTML元素的方法,這樣我們就不必手動來選擇getElementById(),getElementsByClassName(),getElementByTagName()等方法。

雖然我們知道querySelectorAll()試圖解決這個問題,但比比使用jQuery的Facade接口和自己來選擇最優(yōu)的方式時花費(fèi)的精力,毫無疑問,使用模式可以提供真實(shí)世界的抽象價值。

我們將在本書的后面看到更多的設(shè)計(jì)模式。

“模式特性”測試,模式原型和三條規(guī)則

記住并不是每個算法、每個最佳實(shí)踐和每個解決方案都可能被認(rèn)為是一個完整的模式。這兒可能缺少了幾個關(guān)鍵因素,而且模式社團(tuán)除非經(jīng)過嚴(yán)格的審查才謹(jǐn)慎地聲明某東西為模式的。即使某東西對我們來說似乎滿足了模式標(biāo)準(zhǔn),它都不應(yīng)該被當(dāng)作模式,直到它由他人經(jīng)過適當(dāng)時間的周密調(diào)查和測試后才可能當(dāng)作模式。

回頭看看Alexander曾經(jīng)做過的工作,他聲明模式應(yīng)當(dāng)既是過程也是“事物”。這個定義故意不明確,因?yàn)樗o跟著說模式應(yīng)該是創(chuàng)建“事物”的過程。這就是為什么模式通常集中定位在表面上可識別的結(jié)構(gòu)的原因。例如,我們應(yīng)當(dāng)能夠可視化地描繪(或者繪制)圖片來展示把模式應(yīng)用到實(shí)踐中的結(jié)構(gòu)。

在研究設(shè)計(jì)模式的時候,無意間碰到術(shù)語“模式原型”是很正常的。那么什么是模式原型呢? 好,仍然沒有通過"模式特性”測試的模式通常認(rèn)為是模式原型。模式原型也許源自于某人已經(jīng)確定的值得與社團(tuán)共享的特定解決方案的工作,然而由于它提出時間短,所以可能仍然沒有機(jī)會接受嚴(yán)格的審查。

另外,個人共享的模式也許沒有時間或者沒有興趣通過“模式特性”測試這個過程,不過可能發(fā)布了這些模式原型的簡短說明。這種類型模式的簡要描述或者片段就是眾所周知的小模式。

全面文檔化具有資格的模式這樣的工作是非常令人氣餒的?;仡^看看設(shè)計(jì)模式領(lǐng)域最早期的某些工作,如果一個模式能做到以下事情,那么這個模式就可以認(rèn)為是“好的”模式:

  • 解決一類特定的問題:模式不能假設(shè)僅僅關(guān)注原理或者策略。它們需要關(guān)注解決方案。這是好的模式最重要的因素之一。
  • 問題的解決方案不是表面上的:我們發(fā)現(xiàn)解決問題的技術(shù)常常首先試圖源自于某個眾所周知的原理。最佳的設(shè)計(jì)模式通常間接地提供問題的解決方案-認(rèn)為模式是與設(shè)計(jì)相關(guān)的最具有挑戰(zhàn)性的問題必然的解決方法。
  • 所描述的想法一定得到了證明:設(shè)計(jì)模式需要提供所描述的它們運(yùn)行的證據(jù),如果沒有這些證據(jù),就不會認(rèn)真的考慮這個設(shè)計(jì)。如果模式事實(shí)上是高度理論性的話,那么只有冒險者才可能試著用它。
  • 它必須說明與代碼之間關(guān)系:在某些情況下,模式似乎說明了一種類型的模塊。雖然實(shí)現(xiàn)的可能就是這個方法,但是官方的模式說明一定要更深入的描述系統(tǒng)結(jié)構(gòu)和機(jī)制,以解釋它與代碼之間的關(guān)系。

我們認(rèn)為不滿足準(zhǔn)則的模式原型不值得學(xué)習(xí),這可以得到諒解,然而,事實(shí)遠(yuǎn)不是這樣的。許多模式原型確實(shí)非常的好。我不是說所有的模式原型都值得看,不過總有幾個在自然環(huán)境下成長的有用的模式原型可以在未來的項(xiàng)目中幫到我們。從心底里使用上面列表來做最佳評判的話,你在選擇哪個是模式的過程中將感覺非常愉快。

模式是否有效的附加要求之一是模式要展示某些重現(xiàn)現(xiàn)象。這個就是至少在三個關(guān)鍵方面 ,也就是三條規(guī)則驗(yàn)證是否取得資格經(jīng)常要做的事情。為了展示使用這個規(guī)則后的重現(xiàn),模式必須證明其:

  • 適用性-模式怎樣才能被認(rèn)為是成功的。
  • 有用性-為什么認(rèn)為這個模式是成功的?
  • 可用性 -因?yàn)樵O(shè)計(jì)得到廣泛的應(yīng)用,所以認(rèn)為這個設(shè)計(jì)就是模式嗎?如果是這樣的話,那么需要說明。重新審核或者定義模式的時候,牢記以上規(guī)則非常重要。
上一篇:組合模式下一篇:觀察者模式