JavaScript設(shè)計(jì)模式之抽象工廠模式

一颗祝、介紹

如果我們有多個(gè)工廠辉哥,這個(gè)時(shí)候我們就需要管理我們的工廠,可以創(chuàng)建一個(gè)大工廠來分別管理小工廠耳贬。而我們抽象工廠的作用就是為工廠制定規(guī)則踏堡,制定他的結(jié)構(gòu)和功能。我們?cè)趧?chuàng)建同一類別的工廠時(shí)咒劲,只需要繼承抽象工廠的結(jié)構(gòu)顷蟆,然后進(jìn)行重寫即可。

二腐魂、優(yōu)點(diǎn)

抽象工廠可以把工廠的結(jié)構(gòu)抽象出來帐偎,訪問者不需要知道具體的實(shí)現(xiàn),只需要面向具體的結(jié)構(gòu)編程即可蛔屹。

三削樊、缺點(diǎn)

1.在結(jié)構(gòu)需要改動(dòng)的情況下,需要修改抽象工廠判导,違反開閉原則嫉父,帶來大量工作沛硅。
2.會(huì)產(chǎn)生更多的類,和更多的繼承關(guān)系。

四谬擦、示例

class FactoriesRule {//抽象工廠
    constructor(){
        if(new.target === FactoriesRule){
            throw new Error("抽象工廠不能被實(shí)例化")
        }
    }
    get(type){
        throw new Error("抽象工廠的方法不能被調(diào)用")
    }
}
class Factories extends FactoriesRule{//總工廠
    constructor(){
        super();
    }
    get(type){
        var obj = {
            student:new Student(),
            teacher:new Teacher(),
        }
        if(obj[type]){
            return obj[type];
        }else {
            throw new Error("不存在該工廠")
        }
    }
}
class Rule {//抽象工廠
    constructor(){
        if(new.target === Rule){
            throw new Error("抽象工廠不能被實(shí)例化")
        }
    }
    getList(){
        throw new Error("抽象工廠的方法不能被調(diào)用")
    }
}
class Student extends Rule{
    constructor(){
        super()
    }
    getList(){
        return ["小明","小剛","小美","小麗"];
    }
}
class Teacher extends Rule{
    constructor(){
        super()
    }
    getList(){
        return ["趙老師","錢老師","孫老師","李老師"];
    }
}
const factories = new Factories();//總工廠
const student = factories.get("student");//學(xué)生工廠
console.log(student.getList());//學(xué)生名單
const teacher = factories.get("teacher");//老師工廠
console.log(teacher.getList());//老師名單

如果我們的大工廠現(xiàn)在是陽光小學(xué)的工廠是己,那現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)實(shí)驗(yàn)小學(xué)的工廠就變得很簡(jiǎn)單,只需要繼承一下抽象工廠的規(guī)則然后就行重寫就可以了州既。簡(jiǎn)單一點(diǎn)就是:

class ShiYan extends FactoriesRule{//實(shí)驗(yàn)小學(xué)工廠
    constructor(){
        super();
    }
    get(type){
        var obj = {
            student:new Student(),
            teacher:new Teacher(),
        }
        if(obj[type]){
            return obj[type];
        }else {
            throw new Error("不存在該工廠")
        }
    }
}
const shiyan = new ShiYan();//總工廠
const shiyanStudent = shiyan.get("student");//學(xué)生工廠
console.log(shiyanStudent.getList());//學(xué)生名單
const shiyanTeacher = shiyan.get("teacher");//老師工廠
console.log(shiyanTeacher.getList());//老師名單

但是現(xiàn)在我們的工廠里面只能查詢學(xué)生和老師的名單,那我們要招生或者招聘新的老師怎么辦呢。就只能重寫我們的抽象工廠树碱,添加add的規(guī)則,這里我就不展開寫了变秦,就是對(duì)它的缺點(diǎn)做一個(gè)體現(xiàn)成榜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹦玫,隨后出現(xiàn)的幾起案子赎婚,更是在濱河造成了極大的恐慌,老刑警劉巖樱溉,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挣输,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡福贞,警方通過查閱死者的電腦和手機(jī)撩嚼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挖帘,“玉大人完丽,你說我怎么就攤上這事∧匆ǎ” “怎么了逻族?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)你稚。 經(jīng)常有香客問我瓷耙,道長(zhǎng),這世上最難降的妖魔是什么刁赖? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任搁痛,我火速辦了婚禮,結(jié)果婚禮上宇弛,老公的妹妹穿的比我還像新娘鸡典。我一直安慰自己,他們只是感情好枪芒,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布彻况。 她就那樣靜靜地躺著谁尸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纽甘。 梳的紋絲不亂的頭發(fā)上良蛮,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音悍赢,去河邊找鬼决瞳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛左权,可吹牛的內(nèi)容都是我干的皮胡。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼赏迟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屡贺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锌杀,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤甩栈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抛丽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谤职,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年亿鲜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了允蜈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒿柳,死狀恐怖饶套,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垒探,我是刑警寧澤妓蛮,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站圾叼,受9級(jí)特大地震影響蛤克,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夷蚊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一构挤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惕鼓,春花似錦筋现、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽一膨。三九已至,卻和暖如春洒沦,著一層夾襖步出監(jiān)牢的瞬間豹绪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工微谓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留森篷,地道東北人输钩。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓豺型,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親买乃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姻氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容