1、單例模式 (singleton pattern
)(單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項
單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。因為類控制了例項化過程,所以類可以靈活更改例項化過程。
例項:
function gameengine()
/*** 在編寫js遊戲時,我們希望遊戲引擎只能有乙個,保證遊戲正常執行
* 使用單例模式後,每次new gameengine()都能保證是同乙個,
* 同時也方便了,在其他部件中進行介面通訊
*/gameengine.instance = this;
}gameengine.prototype =
2、**模式
3、策略模式 strategy pattern
乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。
使用場景:
1、如果在乙個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態地讓乙個物件在許多行為中選擇一種行為。
2、乙個系統需要動態地在幾種演算法中選擇一種。 3、如果乙個物件有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。
例項:
//color屬性值有多種情況,每種情況執行不同的操作
//if...else if條件判斷,方法一:
if(color)
//也會想到使用switch(),方法二:
switch(color)
//方法一與方法二每次都需進行多次判斷才能得到結果,效率是極低的
//使用策略模式可以有效提高效率,方法三
var colorobj =
if(color in colorobj)
4、觀察者(監聽)模式
observer pattern
當物件間存在一對多關係時,則使用觀察者模式(observer pattern)。比如,當乙個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。
使用場景: 1、有多個子類共有的方法,且邏輯相同。 2、重要的、複雜的方法,可以考慮作為模板方法。
觀察者模式與發布/訂閱模式區別:
/**
* 場景:公司裡有多個員工,員工需要及時的對公司所發的郵件進行處理
* 那麼,員工不可能時時刻刻向公司詢問是否有新郵件,因此使用觀察者模式
* 每當公司有新郵件時,觸發員工的預先設定的事件,當然這個事件必須是
* 有統一的介面(此例中的介面是:staff.getemail)
*/function company()
this.sendemail =function()); }}
function staff(name)
}var com = new company();//例項公司
var staffa = new staff('a');//例項員工
var staffb = new staff('b');
com.addstaff(staffa);//員工註冊
com.addstaff(staffb);
com.sendemail();//公司傳送郵件
參考:
菜鳥教程設計模式:
JavaScript設計模式
js類設計模式一 類建構函式 function myclass 定義公共屬性 myclass.prototype 定義公共方法 myclass.prototype.methoda function myclass.prototype.methodb function 呼叫 var objclass ...
JavaScript設計模式
設計模式是什麼?設計模式就是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。為什麼要使用設計模式?設計模式可重用 讓 更容易被他人理解 保證 可靠性,設計模式使 編制真正工程化。設計模式怎麼來的?設計模式概念是由四人幫 設計模式 可復用物件導向軟體的基礎 的四位作者 提出,總共分成了三...
javascript設計模式 門面模式
什麼是門面模式將乙個複雜的功能簡化乙個簡單的函式呼叫,簡單的來說,我使用榨汁機榨蘋果,我只要將蘋果放進去榨汁機就可以了,不需要了解榨汁機的內部設計.這一模式提供了面向一種更大型的 體提供了乙個的更高階別的舒適的介面,隱藏了其真正的潛在複雜性,方便的開發者的呼叫.例如jquery的 val 的實現就是...