国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式

這篇具有很好參考價(jià)值的文章主要介紹了JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

個(gè)人簡介

??個(gè)人主頁: 前端雜貨鋪
???♂?學(xué)習(xí)方向: 主攻前端方向,正逐漸往全干發(fā)展
??個(gè)人狀態(tài): 研發(fā)工程師,現(xiàn)效力于中國工業(yè)軟件事業(yè)
??人生格言: 積跬步至千里,積小流成江海
??推薦學(xué)習(xí):??前端面試寶典 ??Vue2 ??Vue3 ??Vue2/3項(xiàng)目實(shí)戰(zhàn) ??Node.js??Three.js ??JS版算法
??個(gè)人推廣:每篇文章最下方都有加入方式,旨在交流學(xué)習(xí)&資源分享,快加入進(jìn)來吧


??前言

大家好,這里是前端雜貨鋪。

上一節(jié),我們學(xué)習(xí)了構(gòu)造器模式、原型模式和類模式,并認(rèn)識(shí)到了類模式 = 構(gòu)造器模式 + 原型模式。這一節(jié),我們學(xué)習(xí)簡單工廠模式、抽象工廠模式和建造者模式,認(rèn)識(shí)它們的用途以及區(qū)別…

一、簡單工廠模式

由一個(gè)簡單工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例。主要用來創(chuàng)建某一類對(duì)象。

舉個(gè)栗子:對(duì)于后臺(tái)管理系統(tǒng),一般都會(huì)有 側(cè)邊欄權(quán)限分配 的問題。比如說:

  • superadmin 的權(quán)限包括 “home”, “user-manager”, “right-manage”, “news-manage”。
  • admin 的權(quán)限包括 “home”, “user-manage”, “news-manage”
  • editor 的權(quán)限包括 “home”, “news-manage”

那么當(dāng)某類人員登錄進(jìn)來,側(cè)邊欄就需要顯示該人員權(quán)限范圍內(nèi)的功能,這時(shí)候就可以使用簡單工廠模式。

class User {
    constructor(role, pages) {
        this.role = role;
        this.pages = pages;
    }
    static UserFactory(role) {
        switch (role) {
            case "superadmin":
                console.log(new User("superadmin", ["home", "user-manager", "right-manage", "news-manage"]));
                break;
            case "admin":
                console.log(new User("admin", ["home", "user-manage", "news-manage"]));
                break;
            case "editor":
                console.log(new User("editor", ["home", "news-manage"]));
                break;
            default:
                throw new Error("參數(shù)錯(cuò)誤");
        }
    }
}

let user = User.UserFactory("superadmin");
console.log(user);

JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式,設(shè)計(jì)模式,javascript,設(shè)計(jì)模式,簡單工廠模式

簡單工廠模式的優(yōu)點(diǎn):我們只需要一個(gè)正確的參數(shù),就可以獲取到我們所需要的對(duì)象,無需知道其創(chuàng)建的具體細(xì)節(jié)。

簡單工廠模式的缺點(diǎn):當(dāng)我們的對(duì)象較多時(shí),函數(shù)會(huì)非常龐大,難以維護(hù)。

so,簡單工廠模式只適用于 創(chuàng)建的對(duì)象數(shù)量較少,對(duì)象的創(chuàng)建邏輯不復(fù)雜時(shí)使用。


二、抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是 圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

抽象工廠模式并不直接生成實(shí)例,而是用于對(duì)產(chǎn)品類簇的創(chuàng)建。

我們先創(chuàng)建一個(gè) User 類(超級(jí)工廠),里面有兩個(gè)方法,welcome() 方法用于歡迎某一類人,dataShow() 方法用于打印某一類人(子類重寫的方式)。

之后我們創(chuàng)建三個(gè)子類 SuperAdmin、Admin、Editor(其他工廠),均繼承自 User,它們繼承父類的 name 和 welcome() 方法,重寫父類的 dataShow() 方法。

最后我們創(chuàng)建 getAbstractUserFactory() 函數(shù),傳 role 參數(shù),通過 switch - case 返回相應(yīng)的類進(jìn)行權(quán)限分配。

這樣我們就對(duì)原本龐大的函數(shù)進(jìn)行了解耦,更加容易理解和維護(hù)。

class User {
    constructor(name, role, pages) {
        this.name = name;
        this.role = role;
        this.pages = pages;
    }

    welcome() {
        console.log("歡迎回來", this.name);
    }

    dataShow() {
        throw new Error("抽象方法需要被實(shí)現(xiàn)");
    }
}

class SuperAdmin extends User {
    constructor(name) {
        super(name, "superadmin", ["home", "user-manager", "right-manage", "news-manage"]);
    }

    dataShow() {
        console.log("superadmin-datashow");
    }
}

class Admin extends User {
    constructor(name) {
        super(name, "admin", ["home", "user-manage", "news-manage"]);
    }

    dataShow() {
        console.log("admin-datashow");
    }
}

class Editor extends User {
    constructor(name) {
        super(name, "editor", ["home", "news-manage"]);
    }

    dataShow() {
        console.log("editor-datashow");
    }
}

function getAbstractUserFactory(role) {
    switch(role) {
        case "superadmin": 
            return SuperAdmin;
        case "admin":
            return Admin;
        case "editor":
            return Editor;
        default: 
            throw new Error("參數(shù)錯(cuò)誤");
    }
}

let UserClass = getAbstractUserFactory("admin");
let user = new UserClass("前端雜貨鋪");
user.dataShow();
user.welcome();

JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式,設(shè)計(jì)模式,javascript,設(shè)計(jì)模式,簡單工廠模式


三、建造者模式

建造者模式屬于創(chuàng)建型模式的一種,提供一種創(chuàng)建復(fù)雜對(duì)象的方式。它將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

建造者模式是 一步一步的 創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它 允許用戶只通過指定復(fù)雜的對(duì)象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要指定內(nèi)部的具體構(gòu)造細(xì)節(jié)。

我們模擬一下場景。如下圖,我們把 分類菜單 看做 NavBar,把 熱門推薦列表的內(nèi)容 看做 List。當(dāng)頁面加載的時(shí)候,會(huì)首先初始化(即 init) NavBar 和 List,之后異步獲取相應(yīng)數(shù)據(jù)(即 getData),最后進(jìn)行頁面渲染(即 render)。

JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式,設(shè)計(jì)模式,javascript,設(shè)計(jì)模式,簡單工廠模式

我們構(gòu)建了兩個(gè)同性質(zhì)的類 Navbar 和 List(干的事是一樣的,都是 init => getData => render),之后創(chuàng)建了建造者類 Creator,并添加了一個(gè)異步的 startBuild 方法,它接收一個(gè)參數(shù) builder (即 Navbar 或 List 類的實(shí)例)。我們創(chuàng)建一個(gè) Creator 的實(shí)例,通過實(shí)例去調(diào)用之后 startBuild 方法,之后就可以把復(fù)雜的對(duì)象一步步創(chuàng)建出來了。

class Navbar {
    init() {
        console.log("navbar-init");
    }

    getData() {
        console.log("navbar-getData");
        return new Promise((resolve) => {
            setTimeout(() => {
                resolve('navbar-zahuopu');
            }, 1000);
        })
    }

    render() {
        console.log("navbar-render");
    }
}

class List {
    init() {
        console.log("list-init");
    }

    getData() {
        console.log("list-getData");
        return new Promise((resolve) => {
            setTimeout(() => {
                resolve('list-zahuopu');
            }, 1000);
        })
    }

    render() {
        console.log("list-render");
    }
}

class Creator {
    async startBuild(builder) {
        await builder.init();
        await builder.getData();
        await builder.render();
    }
}

const op = new Creator();
op.startBuild(new Navbar());
op.startBuild(new List());

JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式,設(shè)計(jì)模式,javascript,設(shè)計(jì)模式,簡單工廠模式


????本篇小結(jié)

簡單工廠模式和抽象工廠模式都隸屬于設(shè)計(jì)模式中的 創(chuàng)建型模式

簡單工廠模式是 由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。簡單工廠模式是工廠模式家族中最簡單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)。

抽象工廠模式是指 當(dāng)有多個(gè)抽象角色時(shí)使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個(gè)接口,使客戶端在不必指定產(chǎn)品的具體情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。

建造者模式 將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,同樣的構(gòu)建過程可采用不同的表示。工廠模式主要是為了創(chuàng)建對(duì)象實(shí)例或者類簇(抽象工廠),關(guān)心的最終產(chǎn)出的是什么,而不關(guān)心創(chuàng)建的過程。而建造者模式關(guān)心的是創(chuàng)建這個(gè)對(duì)象的整個(gè)過程,甚至于創(chuàng)建對(duì)象的每一個(gè)細(xì)節(jié)。

好啦,本篇文章到這里就要和大家說再見啦,祝你這篇文章閱讀愉快,你下篇文章的閱讀愉快留著我下篇文章再祝!


參考資料:

  1. 菜鳥教程 · 抽象工廠模式
  2. 百度百科 · 簡單工廠模式,抽象工廠模式
  3. JavaScript設(shè)計(jì)模式 【作者:千鋒教育】

JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式,設(shè)計(jì)模式,javascript,設(shè)計(jì)模式,簡單工廠模式文章來源地址http://www.zghlxwxcb.cn/news/detail-687552.html


到了這里,關(guān)于JavaScript設(shè)計(jì)模式(二)——簡單工廠模式、抽象工廠模式、建造者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式-創(chuàng)建型模式(單例、工廠、建造、原型)

    設(shè)計(jì)模式:軟件設(shè)計(jì)中普遍存在(反復(fù)出現(xiàn))的各種問題,所提出的解決方案。 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。 面向?qū)ο笤O(shè)計(jì)的SOLID原則: (1)開放封閉原則:一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。即軟件實(shí)體應(yīng)盡量在不修改原有代碼的情

    2024年02月08日
    瀏覽(28)
  • 【設(shè)計(jì)模式】單例模式、工廠方法模式、抽象工廠模式

    1. 單例模式 (Singleton Pattern): 場景: 在一個(gè)應(yīng)用程序中,需要一個(gè)全局唯一的配置管理器,確保配置信息只有一個(gè)實(shí)例。 2. 工廠方法模式 (Factory Method Pattern): 場景: 創(chuàng)建一組具有相似功能但具體實(shí)現(xiàn)不同的日志記錄器。 3. 抽象工廠模式 (Abstract Factory Pattern): 場景: 創(chuàng)建不同

    2024年01月15日
    瀏覽(29)
  • 設(shè)計(jì)模式 - 創(chuàng)建型模式考點(diǎn)篇:工廠模式、建造者模式

    設(shè)計(jì)模式 - 創(chuàng)建型模式考點(diǎn)篇:工廠模式、建造者模式

    目錄 一、創(chuàng)建型模式 一句話概括 1.1、工廠模式 1.1.1、簡單工廠模式(非 23 種經(jīng)典設(shè)計(jì)模式) 概述 案例 1.1.2、靜態(tài)工廠(擴(kuò)展) 1.1.3、工廠方法模式 概念 案例 1.2、建造者模式 1.2.1、概念 1.2.2、案例 1.2.3、建造者模式擴(kuò)展:鏈?zhǔn)骄幊痰讓?1.3、工廠方法模式 VS 建造者模式 創(chuàng)

    2024年02月07日
    瀏覽(19)
  • 設(shè)計(jì)模式-抽象工廠模式

    抽象工廠模式:該模式是對(duì)工廠模式的拓展,因?yàn)楣S模式中創(chuàng)建的產(chǎn)品都需要繼承自同一個(gè)父類或接口,創(chuàng)建的產(chǎn)品類型相同,無法創(chuàng)建其他類型產(chǎn)品,所以抽象工廠模式對(duì)其進(jìn)行拓展,使其可以創(chuàng)建其他類型的產(chǎn)品。 手機(jī)產(chǎn)品 Pad產(chǎn)品 工廠 優(yōu)點(diǎn):創(chuàng)建的產(chǎn)品種類不單一

    2024年02月13日
    瀏覽(22)
  • 【設(shè)計(jì)模式】抽象工廠模式

    【設(shè)計(jì)模式】抽象工廠模式

    抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類。每個(gè)

    2024年02月13日
    瀏覽(28)
  • 設(shè)計(jì)模式 - 抽象工廠模式

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

    學(xué)完工廠模式,才發(fā)現(xiàn)還有一個(gè)抽象工廠模式;學(xué)習(xí)后發(fā)現(xiàn)不論是通過接口方式、還是繼承方式,都可以使用抽象工廠模式;但是個(gè)人建議更多的時(shí)候,我們可以優(yōu)先考慮接口方式,畢竟 單繼承,多實(shí)現(xiàn) 設(shè)計(jì)模式分為三種類型,共23種 創(chuàng)建型模式:單例模式、工廠模式、抽

    2024年02月13日
    瀏覽(28)
  • 設(shè)計(jì)模式(三):抽象工廠模式

    設(shè)計(jì)模式(三):抽象工廠模式

    抽象工廠模式 (Abstract Factory Pattern)屬于創(chuàng)建型模式,是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠。該超級(jí)工廠又稱為其他工廠的工廠。 在 抽象工廠模式 中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。 通過使用 抽

    2024年04月25日
    瀏覽(23)
  • 重溫設(shè)計(jì)模式 --- 抽象工廠模式

    抽象工廠模式 一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種方式來封裝一組具有相同主題的工廠,而不必指定它們具體的類。這樣,客戶端代碼就可以使用抽象工廠來創(chuàng)建一組相關(guān)的對(duì)象,而不必關(guān)心實(shí)際創(chuàng)建的具體類。 抽象工廠模式有以下幾個(gè)主要角色: 抽象工廠(AbstractFactory)

    2024年02月13日
    瀏覽(36)
  • 設(shè)計(jì)模式(3)抽象工廠模式

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

    一、介紹: 1、定義:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無須指定它們具體的類。 2、組成結(jié)構(gòu): (1)抽象工廠角色:擔(dān)任這個(gè)角色的是工廠方法模式的核心,它是與應(yīng)用程序無關(guān)的。任何在模式中創(chuàng)建對(duì)象的工廠類必須實(shí)現(xiàn)這個(gè)接口。 (2)具體工廠角色

    2024年02月11日
    瀏覽(23)
  • 【設(shè)計(jì)模式專題之抽象工廠模式】3. 家具工廠

    題目描述 小明家新開了兩個(gè)工廠用來生產(chǎn)家具,一個(gè)生產(chǎn)現(xiàn)代風(fēng)格的沙發(fā)和椅子,一個(gè)生產(chǎn)古典風(fēng)格的沙發(fā)和椅子,現(xiàn)在工廠收到了一筆訂單,請(qǐng)你幫他設(shè)計(jì)一個(gè)系統(tǒng),描述訂單需要生產(chǎn)家具的信息。 輸入描述 輸入的第一行是一個(gè)整數(shù) N(1 ≤ N ≤ 100),表示訂單的數(shù)量。

    2024年03月12日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包