JavaScript的23種設計模式「更新中」

1.單例模式

定義:一個類只能有一個實例,即使多次實例化也返回的是第一次實例
意義:共享變量、減少變量、函數(shù)命名沖突、減少內(nèi)存開銷
場景:登錄框、購物車、redux/Vuex中的store、JQ的$
實現(xiàn):

class SingletonLogin {
    constructor(name,password){
        this.name = name
        this.password = password
    }
    //使用ES6的static關(guān)鍵字,可以定義靜態(tài)方法,從而可以直接使用類名.方法的方式調(diào)用getInstance()
    static getInstance(name,password){
        //判斷對象是否已經(jīng)被創(chuàng)建,若創(chuàng)建則返回舊對象
        if(!this.instance)this.instance = new SingletonLogin(name,password)
        return this.instance
    }
}
 
let obj1 = SingletonLogin.getInstance('CJW','123')
let obj2 = SingletonLogin.getInstance('CJW','321')
 
console.log(obj1===obj2)    //輸出true
console.log(obj1)           //輸入obj1
console.log(obj2)           //輸入的依然是obj1{name:CJW,password:123}

8.適配器模式

1.介紹:適配器模式(Adapter Pattern):將一個接口轉(zhuǎn)換成客戶希望的另一個接口,使接口不兼容的那些類可以一起工作。適配器的概念不難理解,我們在生活中就常常有使用適配器的場景,例如出境旅游插頭插座不匹配,這時我們就需要使用轉(zhuǎn)換插頭,也就是適配器來幫我們解決問題。
2.UML類圖


image.png

3.代碼演示

class Adaptee {
    test() {
        return '舊接口'
    }
}
 
class Target {
    constructor() {
        this.adaptee = new Adaptee()
    }
    test() {
        let info = this.adaptee.test()
        return `適配${info}`
    }
}
 
let target = new Target()
console.log(target.test())

4.場景:
適配器模式的常見使用場景是封裝舊接口,我們項目中常常有很多由于歷史原因留下的舊API,這里以JQ的AJAX舉個例子,比如說,我們在項目中寫了大量的$.ajax來進行異步請求,時過境遷,技術(shù)迭代,我們要把JQ的ajax全部換成自己封裝的ajax來進行請求,如果我們直接在代碼中替換,那么工作量非常大并且容易出錯,這時候就可以使用適配器模式,去兼容原有的API。

//JQ的ajax
$.ajax({
    url:'/api',
    type:'post',
    dataType:'json',
    data:{},
    success: function(data){
                    
    },
})
//經(jīng)過封裝適配的ajax
var $ = {
    ajax:function(options) {
        //query()是自己封裝的ajax,這里不寫實現(xiàn)
        return query(options)
    }
}

經(jīng)過適配,我們就可以在去除JQ的情況下繼續(xù)使用$.ajax()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容