01 簡單工廠模式

本系列文章是我在閱讀《JavaScript 設(shè)計模式》這本書的一些筆記,這本書是國內(nèi)的張容銘寫的,注意和另一本外國的同名書籍進(jìn)行區(qū)分。

場景

當(dāng)你使用面向?qū)ο箝_發(fā) web 應(yīng)用時,會創(chuàng)建很多很多的類。比如控制登錄的 Login 類,控制注冊的 Register 類,和用戶有關(guān)的 User 類等。
這樣的類越來越多,你不得不一一記住這些類的名字,并在開發(fā)過程中初始化這些類,代碼結(jié)構(gòu)看起來很散亂,到處都是 new xxx 這樣的語句。
簡單工廠模式就是為了解決類似這種問題的:通過一個公共的工廠函數(shù)(類),根據(jù)傳入的參數(shù)不同,向外暴露不同的對象。
事實上,簡單工廠模式的思想不僅僅用在面向?qū)ο缶幊讨校胀ǖ拿嫦蜻^程編程也會運用這種思想,只不過我們不把它叫做簡單工廠模式而已??聪旅娴拇a:

function checkRole(role_id){
    switch(role_id){
        case "0":
            return "超級管理員";
        case "1":
            return "普通管理員"
        case "3":
            return "注冊用戶"
        default:
            return "游客"
    }
}

根據(jù)不同的角色 id,返回相應(yīng)的角色描述,這本身就是工廠模式的思想。

實現(xiàn)

簡單工廠模式的實現(xiàn)比較簡單:我們只需在工廠函數(shù)(類)上根據(jù)參數(shù)進(jìn)行判斷,然后返回特定類的實例即可。

// 足球類
class FootBall{
    playFootBall(){
        console.log("我是一個愉快的足球")
    }
}

// 籃球類
class BasketBall{
    playBasketBall(){
        console.log("我是一個胖胖的籃球")
    }
}

// 高爾夫球
class Golf{
    playGolf(){
        console.log("我是一個高貴的高爾夫")
    }
}

// 簡單工廠
class BallFactory{
    constructor(type) {
        switch(type){
            case "FootBall":
                return new FootBall();
            case "BasketBall":
                return new BasketBall();
            case "Golf":
                return new Golf();
        }
    }
}

// 創(chuàng)建對象
const football = new BallFactory("FootBall")
const basketball = new BallFactory("BasketBall")
const golf = new BallFactory("Golf")
football.playFootBall()
basketball.playBasketBall()
golf.playGolf()

運行結(jié)果:

我是一個愉快的足球
我是一個胖胖的籃球
我是一個高貴的高爾夫

使用簡單工廠模式,我們只需在工廠函數(shù)(類)內(nèi)部維護(hù)一套類的列表,根據(jù)參數(shù)來創(chuàng)建相應(yīng)的類的實例對象,提高了代碼的整潔性和可維護(hù)性。

完。

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

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

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