本系列文章是我在閱讀《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ù)性。
完。