1.設計模式之初體驗—精讀《JavaScript 設計模式》Addy Osmani著
Wumw發表於2018-11-10
同系列友情連結:
原始模式(proto-pattern):一種尚未通過“模式”測試的設計模式;
優秀的模式:如果模式可以執行以下操作,就被認為是優秀的模式:
- 解決特殊問題。模式不應該只是獲取原則或策略,它們需要獲取解決方案。這隻作為一種優秀模式不可或缺的要素。
- 沒有顯而易見的解決方案。我們會發現,解決問題的技術基本來自眾所周知的基本原則。最好的設計模式通常會間接提供解決問題的方案——這被認為是解決與設計相關的最具挑戰性問題的必要方法。
- 描述業經驗證的概念。設計模式需要證明它們的作用與描述相一致,並且如果沒有證明這一點,就不能認真考慮該設計。如果一種模式實際上是推測出來的,那麼只有那些勇敢的人才可能嘗試它。
- 描述一種關係。在某些情況下,看起來可能是一種模式描述了一種型別的模組。儘管一種實現看起來也是這樣,但對模式的正式描述必須能夠更深入的理解它與程式碼關係的系統結構和機制。
反模式:描述一種針對於某種特定問題的不良解決方案,該方案會導致糟糕的情況發生;描述如何擺脫前述的糟糕情況以及如何創造好的解決方案。
JavaScript 中的反模式:
- 在全域性上下文中定義大量的變數汙染全域性名稱空間;
- 向 setTimeout 或 setInterval 傳遞字串,而不是函式,這會觸發 eval ( ) 的內部使用;
- 修改 Object類的原型(這是一個特別不良的反模式);
- 以內斂的形式使用 JavaScript,它是不可改變的;
- 在使用document.createElement 等原生DOM 方法更適合的情況下使用 document.write。多年以來document.write一直都是在被嚴重濫用,並有相當多的缺點,包括:如果在頁面載入完成後執行document.write,它實際上會重寫我們所在的頁面,而document.createElement則不會。訪問此網站可以看到它執行的例項。document.write也無法與XHTML相適,這是選擇像document.createElement這樣更為DOM友好的方法比較有利的另一個原因。
設計模式的類別:
建立型設計模式:專注於處理物件建立機制,以適合給定情況的方式來建立物件。建立物件的基本方法可能導致專案複雜性增加,而這些模式旨在通過控制建立過程來解決這種問題。
- Constructor(構造器)
- Factory(工廠)
- Abstract(抽象)
- Prototype(原型)
- Singleton(單例)
- Builder(生成)
結構型設計模式:結構型模式與物件組合有關,通常可以用於在不同物件之間建立關係的簡單方法。這種模式有助於確保在系統某一部分發生變化時,系統的整個結構不需要同時改變。同時對於不適用因某一特定目的而改變的系統部分,這種模式也能夠幫助它們完成重組。
- Decorator(裝飾者)
- Facade(外觀)
- Flyweight(享元)
- Adapter(介面卡)
- Proxy(代理)
行為設計模式:行為模式專注於改善或簡化系統中不同物件之間的通訊。
- Iterator(迭代器)
- Mediator(中介者)
- Observe(觀察者)
- Visitor(訪問者)
讀後感
- 以上內容直接摘抄於原書內容,如有筆誤,歡迎指點,定會及時更改;
- 針對於各大論壇中設計模式的技術分享有太多的技術等級有差異、分享內容片面不具體,技術帖渾水摸魚等問題,本書是一本具有極高專業度與認可度的書,是值得花時間去研究與學習的一本好書;
- 下次更新將著重對第九章:JavaScript 設計模式 逐次精讀並實操應用。