JS設(shè)計(jì)模式-工廠模式

工廠模式介紹

什么時(shí)候用工廠模式,使用場(chǎng)景等?
  • 將 new 操作單獨(dú)封裝
  • 遇到 new 時(shí),就要考慮是否該使用工廠模式。
示例
  • 你去購(gòu)買漢堡,直接點(diǎn)餐,取餐,不用自己親手做。
  • 商店要 ”封裝" 做漢堡的工作,做好直接給買者。
工廠模式UML類圖如下
工廠模式UML類圖

其中Creator是一個(gè)工廠,Product 是一個(gè)產(chǎn)品。
一個(gè)Creator工廠有一個(gè)create方法,返回一個(gè)產(chǎn)品,可以理解為最簡(jiǎn)單的工廠模式。

代碼演示

class Product {
    constructor(name) {
        this.name = name;
    }

    init() {
        alert("init");
    }
    
    fn1() {
        alert("fn1");
    }
    fn2() {
        alert("fn2");
    } 
}
class Creator {
    create(name){
        return new Product(name);
    }
}

// 測(cè)試
let creator = new Creator();
let p = creator.create("p1");
p.init();
p.fn1();

// 結(jié)果 彈出 init  111 

結(jié)論: 我們通過Creator類提供的create方法來創(chuàng)建Product, 通過Creator工廠已經(jīng)把真正的構(gòu)造函數(shù)封裝起來了,我們用的時(shí)候只需要知道Creator工廠的create方法可以產(chǎn)生一個(gè)實(shí)例,而不用去關(guān)心生成的實(shí)例是誰。

常見場(chǎng)景
  • Jquery - $("div")
  • React.createElement
  • Vue 異步組件
  1. Jquery工廠模式簡(jiǎn)單demo
class Jquery {
    constructor(selector){
        let slice = Array.prototype.slice;
        let dom = slice.call(document.querySelectorAll(selector));
        let len = dom ? dom.length : 0;
        for(let i = 0; i < len; i++) {
            this[i] = dom[i];
        }
        this.length = len;
        this.selector = selector || "";
    }
    append(node){

    }
    addClass(name){

    }
    html(data){

    }
}
window.$ = function (selector) {
    return new Jquery(selector);
}
  1. React.createElement簡(jiǎn)單demo
class VNode (tag, attrs, children)  { // 此處寫法便于理解,語法錯(cuò)誤請(qǐng)忽略
   // 省略內(nèi)部代碼
}
React.createElement = function (tag, attrs, children) {
    return new Vnode(tag, attrs, children);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 全量備份原始SVN庫 - mastersvnadmin hotcopy repos/ repos.bak 將mas...
    會(huì)飛的蝸牛07閱讀 200評(píng)論 0 0
  • 事件1、接著昨天的事情繼續(xù)爭(zhēng)吵,雖然對(duì)方已經(jīng)示弱,但是我依舊不能平復(fù)情緒。 內(nèi)心感受:憤怒十級(jí) 內(nèi)心需求:有企圖心...
    魚羊姑娘閱讀 187評(píng)論 0 1
  • 【優(yōu)勝行動(dòng)派?學(xué)習(xí)日記】 [打卡寶寶]:王燕 [打卡日期]:2019/3/2 [學(xué)習(xí)內(nèi)容]:標(biāo)準(zhǔn)化的偏執(zhí)狂 [學(xué)習(xí)...
    meng7277閱讀 376評(píng)論 0 0
  • 2019/03/02 GANSynth: Making music with GANs https://magen...
    onepedalo閱讀 297評(píng)論 0 1
  • STM8S903K3T6CTR特征詳解 特征 核心 ·采用哈佛架構(gòu)和3級(jí)流水線的16 MHz高級(jí)STM8內(nèi)核 ·擴(kuò)...
    剩下的盛夏0320閱讀 207評(píng)論 0 0

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