【JavaScript】設計模式-module模式及其改進

來源:互聯網
上載者:User

標籤:架構   互動   設計   複雜   成長   變數   使用   ons   技巧   

寫在前面

編寫易於維護的代碼,其中最重要的方面就是能夠找到代碼中重複出現的主題並最佳化他們,這也是設計模式最有價值的地方

說到這裡......

《head first設計模式》裡有一篇文章,是說使用模式的心智,

  1、初學者"心智" :"我要為HELLO WORLD找個模式"

  2、中級人員模式: "或許這裡我需要一個單件模式"

  3、悟道者心智:"在這裡使用一個裝飾者模式相當自然"

  but,but,but,不學,連初學者都不算呐...  

  先瞭解一下設計模式的起源吧:

    >>>設計模式最初起源於奧地利維也納的一個土木工程師克裡斯托弗·亞曆山大,模式語言最早是為瞭解決複雜工程項目而創立的,30年前,軟體開發工程師們的開始把亞曆山大編寫的設計原則納入首個設計模式的文檔中。

    >>>1995年,出版了《設計模式:可複用物件導向軟體的基礎》,就這樣經過開發工程師們的經驗的總結與使用,成長成為今天的設計模式,已經得到了廣泛的使用,是初級開發人員改進編程技巧的指南。

  那麼就先為我們的hello world找個模式吧 【罒ω罒】...我使用的JavaScript

Module(模組)模式

  模組是任何強大的應用程式架構中不可或缺的一部分,也是在程式架構中應用比較廣泛的模式,他協助我們清楚的分離組織項目中代碼單元

  在module模式中,,可以使一個對象擁有共有/私人方法和變數,從而屏蔽來自全域範圍的特殊部分

  

  我們來一艘卡通版的module~

  

 

  相信聰明的你已經觀察出來了,在module模式中,有兩個重要的點就是公有私人 ,

  module模式提供了一種混合公有/私人方法和變數的方式,防止其泄露至全域範圍,並與別的開發人員介面發生衝突,

  通過該模式,只需返回一個公有的API,而其他的一切都維持在私人閉包裡。

  我們來寫一個簡單的樣本:<通過module模式實現一個購物車>

  

 在module模式中,我們注意到了,我們返回了一個object對象。他會自動賦值給basketModule,以便我們可以與他互動.

我們的函數能夠享有私人函數的自由,因為他們不會暴露於頁面的其他部分,

  

  當我們試著輸出console.log(basket) ,發現不能正常工作,因為basket只存在basketModule閉包的範圍中,而不是存在於返回的公有對象裡。

 Module模式變化

1、引入混入

  模式的引入混入變化示範了全域變數如何作為參數傳遞給模組的匿名函數,如果你想在你的模式中使用jQuery或者underscore等等中的方法

  

  通過全域變數(jQuery、underscore)傳遞參數給模組的方式來使用全域變數中的方法。

 2、引出

  我們聲明一個全域變數,而不需要使用他。然後接下來你用樣可以使用引入混入的方法引入該全域變數
  

  我們在控制台輸出myModule,裡面已經存在了一公有變數和方法,
  但是module,privateVariable、privateMethod對外仍然是不可見的,這樣也保持了全域變數的純潔性

Revealing module(揭示)模式

我們理解了module模式之後,我們來看一個稍有改進的版本 — —Revealing module模式:

Revealing module的關鍵在於:將暴露的公有指標指向私人函數和屬性上

Heilmann建立的這種改進版的module模式,可以使指令碼文法更加一致。在模板代碼的底部,他很容易指出哪些函數和變數可以被公開訪問,從而改善可讀性

但是Revealing module 相比 module模式建立的模組更加脆弱,所以使用時應特別小心(ヽ( ̄▽ ̄)?,hey,我會注意)

寫在後面

  module模式的優勢是很明顯的,它支援私人資料,在module模式中代碼的公有部分能夠接觸私人部分,而外界無法接觸類的私人部分。

  那麼module模式有哪些缺點呢?由於我們訪問公有和私人成員的方式不同,當我們想要改變可見度時,我們就需要修改每一個曾經使用過該成員的地方。還有其他的一些缺點

  雖然如此module仍然是相當有用的。

  

參考書籍:

  《JavaScript設計模式》
  《head first設計模式》

  

 

【JavaScript】設計模式-module模式及其改進

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.