成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript中的工廠模式簡(jiǎn)述

RyanQ / 382人閱讀

摘要:為了解決這個(gè)問(wèn)題,我們可以使用工廠模式。框架中的工廠模式中的其實(shí)就是一個(gè)工廠函數(shù),它根據(jù)傳入?yún)?shù)的不同創(chuàng)建元素或者去尋找上下文中的元素,創(chuàng)建成相應(yīng)的對(duì)象。工廠模式有利于消除對(duì)象間的耦合,提供更大的靈活性。

本文首發(fā)于知乎專(zhuān)欄:前端指南

定義

工廠模式定義創(chuàng)建對(duì)象的接口,但是讓子類(lèi)決定實(shí)例化哪個(gè)類(lèi)。工廠方法將類(lèi)的實(shí)例化延遲到子類(lèi)。

概述

我們可以使用Object構(gòu)造函數(shù)來(lái)創(chuàng)建單個(gè)對(duì)象,但是,使用同一個(gè)接口創(chuàng)建很多對(duì)象時(shí),會(huì)產(chǎn)生大量重復(fù)的代碼。為了解決這個(gè)問(wèn)題,我們可以使用工廠模式。

實(shí)例

我們來(lái)看一個(gè)簡(jiǎn)單的例子:

var employee1 = new Object();
employee1.position = "Front end engineer";
employee1.tool = "I love vscode.";
employee1.introduction = function () {
    console.log("I am a " + this.position + ", and " + this.tool);
}
var employee2 = new Object();
employee2.position = "UI designer";
employee2.tool = "I love photoshop.";
employee2.introduction = function () {
    console.log("I am a " + this.position + ", and " + this.tool);
}
employee1.introduction();//I am a Front end engineer, and I love vscode.
employee2.introduction();//I am a UI designer, and I love photoshop.

在上邊這個(gè)例子中,我們定義了兩個(gè)employee,一個(gè)是Front End Engineer,另一個(gè)是UI designer,他們都有position屬性和tool屬性,也都有introduction方法。如果我們需要?jiǎng)?chuàng)建很多個(gè)類(lèi)似employee的對(duì)象呢,那我們就需要重復(fù)很多類(lèi)似的代碼。接下來(lái),我們做一些簡(jiǎn)單的修改:

function Employee(type) {
    var employee;
    if (type == "programmer") {
        employee = new Programmer();
    } else if (type == "designer") {
        employee = new Designer();
    }
    employee.introduction = function () {
        console.log("I am a " + this.position + ", and " + this.tool);
    }
    return employee;

}

function Programmer() {
    this.position = "Front end engineer";
    this.tool = "I love vscode.";
}
function Designer() {
    this.position = "UI designer";
    this.tool = "I love photoshop.";
}

var employee1 = Employee("programmer");
employee1.introduction();//I am a Front end engineer, and I love vscode.
var employee2 = Employee("designer");
employee2.introduction();//I am a UI designer, and I love photoshop.

在上邊這段代碼中,我們將employee的初始化分別放到了Programmer()和Designer()中實(shí)現(xiàn)。這其實(shí)就是一個(gè)簡(jiǎn)單工廠模式的例子,Employee是一個(gè)工廠,可以根據(jù)傳入的type的不同,創(chuàng)建不同的employee,每個(gè)employee有自己的職位和使用的工具,每個(gè)employee都可以介紹自己的這些信息。

框架中的工廠模式

jQuery中的$()其實(shí)就是一個(gè)工廠函數(shù),它根據(jù)傳入?yún)?shù)的不同創(chuàng)建元素或者去尋找上下文中的元素,創(chuàng)建成相應(yīng)的jQuery對(duì)象。
以下實(shí)例來(lái)自于https://github.com/jquery/jqu...

init = jQuery.fn.init = function( selector, context, root ) {
    var match, elem;

    // HANDLE: $(""), $(null), $(undefined), $(false)
    if ( !selector ) {
        return this;
    }

    // Method init() accepts an alternate rootjQuery
    // so migrate can support jQuery.sub (gh-2101)
    root = root || rootjQuery;

    // Handle HTML strings
    if ( typeof selector === "string" ) {
            
 ? ? ? ?//...

    // HANDLE: $(DOMElement)
    } else if ( selector.nodeType ) {
        
        //....

    // HANDLE: $(function)
    // Shortcut for document ready
    } else if ( jQuery.isFunction( selector ) ) {
        //....
    }

    return jQuery.makeArray( selector, this );
};

同時(shí),像Angular2、Node、Vue、React等等,很多開(kāi)源框架中其實(shí)都用到了工廠模式,學(xué)會(huì)工廠模式,有助于你更好的理解和使用這些框架。

總結(jié)

當(dāng)需要根據(jù)不同參數(shù)產(chǎn)生不同實(shí)例,這些實(shí)例都有相同的行為,這時(shí)候我們可以使用工廠模式,簡(jiǎn)化實(shí)現(xiàn)的過(guò)程,同時(shí)也可以減少每種對(duì)象所需的代碼量。工廠模式有利于消除對(duì)象間的耦合,提供更大的靈活性。

注:如果不需要另外一個(gè)類(lèi),或者不需要在運(yùn)行期間判斷實(shí)例化的對(duì)象屬于哪個(gè)類(lèi),那就不需要使用工廠模式,大多數(shù)情況下使用new關(guān)鍵字和構(gòu)造函數(shù)公開(kāi)實(shí)例化對(duì)象,提高代碼可讀性。切勿濫用。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82944.html

相關(guān)文章

  • JS或Jquery

    摘要:大潮來(lái)襲前端開(kāi)發(fā)能做些什么去年谷歌和火狐針對(duì)提出了的標(biāo)準(zhǔn),顧名思義,即的體驗(yàn)方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁(yè),新的標(biāo)準(zhǔn)讓我們可以使用語(yǔ)言來(lái)開(kāi)發(fā)。 VR 大潮來(lái)襲 --- 前端開(kāi)發(fā)能做些什么 去年谷歌和火狐針對(duì) WebVR 提出了 WebVR API 的標(biāo)準(zhǔn),顧名思義,WebVR 即 web + VR 的體驗(yàn)方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁(yè),新的 API 標(biāo)準(zhǔn)讓我們可以使用 ...

    CatalpaFlat 評(píng)論0 收藏0
  • PHP設(shè)計(jì)模式(二)工廠方法模式(Factory Method)

    摘要:對(duì)于這個(gè)問(wèn)題,接下來(lái)的工廠方法模式可以解決這個(gè)問(wèn)題。二工廠方法模式的優(yōu)點(diǎn)擁有良好的封裝性,代碼結(jié)構(gòu)清晰。參考系列源地址系列目錄設(shè)計(jì)模式概述設(shè)計(jì)模式一簡(jiǎn)單工廠模式設(shè)計(jì)模式二工廠方法模式設(shè)計(jì)模式三抽象工廠模式設(shè)計(jì)模式四單例模式 簡(jiǎn)單工廠簡(jiǎn)述: 簡(jiǎn)單工廠模式實(shí)現(xiàn)了產(chǎn)品類(lèi)的代碼跟客戶(hù)端代碼分離,但會(huì)有一個(gè)問(wèn)題,優(yōu)秀的代碼是符合開(kāi)閉原則如果你要加一個(gè)C類(lèi)產(chǎn)品,你就要修改工廠類(lèi)里面的代碼,也就是說(shuō)...

    zhjx922 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式一:工廠模式和構(gòu)造器模式

    摘要:集中實(shí)例化的函數(shù)第一個(gè)實(shí)例第二個(gè)實(shí)例工廠模式的分類(lèi)工廠模式分為簡(jiǎn)單工廠抽象工廠和智能工廠,工廠模式不顯示地要求使用一個(gè)構(gòu)造函數(shù)。工廠模式之弊大多數(shù)類(lèi)最好使用關(guān)鍵字和構(gòu)造函數(shù),可以讓代碼更加簡(jiǎn)單易讀。帶原型的構(gòu)造器中有一個(gè)名為的屬性。 什么是模式 前陣子準(zhǔn)備期末考試,挺累也挺忙的,實(shí)在閑不得空來(lái)更新文章,今天和大家說(shuō)說(shuō)javascript中的設(shè)計(jì)模式。 首先呢,我們需要知道的是:模式是一...

    MkkHou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<