javascript設計模式系列(一)------接口

 

javascript雖然也是面向對象的語言,但是並沒有實現像java,php這些實現了對接口、繼承等這些面向對象特性的內置支持。在使用js爲前端主體開發大型項目的時候,不使用設計模式來開發到後期就會覺得相當的痛苦。代碼的大量冗餘,邏輯之間的混亂,可維護性很差。這也是爲什麼js被詬病不能開發大型項目的原因。但是js是相當靈活的語言,我們可與根據他的詞法作用域的性質,來模擬實現面向對象的編程。最開始我們來實現js的接口特性,這也是其他設計模式的基礎。

什麼是接口:

接口提供了一種用以說明一個對象應該具有哪些方法的手段。儘管它可以說明這些方法的語義,但是不規定這些這些方法的具體實現。

這裏上一個PHP接口的例子:

 

結果例子就很清楚的看到,代碼中InterDemo只是聲明瞭這個接口有一個interFunc這個方法。但是這個方法怎麼實現的,是在ClassDemo中來呈現的。

在javascript中模仿接口:

廢話不多說,先上代碼,然後再解釋:

 

代碼中註釋已經很清楚了,這裏說下幾個關鍵的函數:

  • Interface:其實是定義一個我們所謂的接口類型。在我們項目中,js接口就是這種形式,他有兩個屬性:接口的名字,方法名集。以後任何時候想聲明一個接口,只要實例化一個對象就可以。
  • Interface.ensureImplement:工具函數,這個是使用js來模擬接口的一個核心函數。這個函數接收兩個參數:obj和inter。obj就是我們的將要使用的一個對象,inter就是我們提供來檢查obj是不是滿足接口定義的接口對象。只有滿足才程序纔會繼續進行,否則會拋出錯誤。
  • ObjFormatter:工具函數,產生滿足接口定義的對象,上面的ensureImplement就是在這裏發揮作用。

使用接口的好處:

  1. 接口可以告訴程序員一個類實現了哪些方法,從而幫助其使用這個類。
  2. 接口可以穩定不同類之間的通信方式。如果事先知道了接口,在項目集成的過程中就會少初相問題。協同開發的時候,一個程序員就可以事先說明他需要一個類具有哪些特性和操作。他就可以定義一個接口,然後把他一覺給其他人,其他人可以隨心所欲的編寫這個類,但是這個類一定要包含我接口裏定義的方法。
  3. 測試也會變得更清晰,由於js是弱類型語言,類型不匹配錯誤很難跟蹤。但是使用接口可以把這些錯誤限制在對象本身範圍內。

使用接口的壞處:

  1. 顯而易見,對於在客戶端運行的代碼,系統資源消耗的增多是不是可接受的,看一看ensureImplement函數的實現,是不是有點鬧心呢。
  2. 要求團隊的整體水平較高。
  3. js無法強制的要求其他程序員也使用接口。想java,php這種如果定義了一個接口,當這個接口的方法沒有被實現的時候,IDE會提示編譯不過。但是js不一樣,全憑自覺。這就又回到了第二條。

注:

主體知識來自於《javascript設計模式》這本書,添加了自己的修改與心得。

轉載請註明出處:http://hi.csdn.net/duran1986

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章