亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解

 更新時(shí)間:2015年03月03日 11:18:29   投稿:junjie  
這篇文章主要介紹了深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解,工廠模式定義一個(gè)用于創(chuàng)建對(duì)象的接口,這個(gè)接口由子類決定實(shí)例化哪一個(gè)類,需要的朋友可以參考下

介紹

與創(chuàng)建型模式類似,工廠模式創(chuàng)建對(duì)象(視為工廠里的產(chǎn)品)時(shí)無(wú)需指定創(chuàng)建對(duì)象的具體類。

工廠模式定義一個(gè)用于創(chuàng)建對(duì)象的接口,這個(gè)接口由子類決定實(shí)例化哪一個(gè)類。該模式使一個(gè)類的實(shí)例化延遲到了子類。而子類可以重寫接口方法以便創(chuàng)建的時(shí)候指定自己的對(duì)象類型。

這個(gè)模式十分有用,尤其是創(chuàng)建對(duì)象的流程賦值的時(shí)候,比如依賴于很多設(shè)置文件等。并且,你會(huì)經(jīng)常在程序里看到工廠方法,用于讓子類類定義需要?jiǎng)?chuàng)建的對(duì)象類型。

正文

下面這個(gè)例子中,是應(yīng)用了工廠方法對(duì)第26章構(gòu)造函數(shù)模式代碼的改進(jìn)版本:

復(fù)制代碼 代碼如下:

var Car = (function () {
    var Car = function (model, year, miles) {
        this.model = model;
        this.year = year;
        this.miles = miles;
    };
    return function (model, year, miles) {
        return new Car(model, year, miles);
    };
})();

var tom = new Car("Tom", 2009, 20000);
var dudu = new Car("Dudu", 2010, 5000);

不好理解的話,我們?cè)俳o一個(gè)例子:

復(fù)制代碼 代碼如下:

var productManager = {};

productManager.createProductA = function () {
    console.log('ProductA');
}

productManager.createProductB = function () {
    console.log('ProductB');
}
       
productManager.factory = function (typeType) {
    return new productManager[typeType];
}

productManager.factory("createProductA");

如果還不理解的話,那我們就再詳細(xì)一點(diǎn)咯,假如我們想在網(wǎng)頁(yè)面里插入一些元素,而這些元素類型不固定,可能是圖片,也有可能是連接,甚至可能是文本,根據(jù)工廠模式的定義,我們需要定義工廠類和相應(yīng)的子類,我們先來(lái)定義子類的具體實(shí)現(xiàn)(也就是子函數(shù)):

復(fù)制代碼 代碼如下:

var page = page || {};
page.dom = page.dom || {};
//子函數(shù)1:處理文本
page.dom.Text = function () {
    this.insert = function (where) {
        var txt = document.createTextNode(this.url);
        where.appendChild(txt);
    };
};

//子函數(shù)2:處理鏈接
page.dom.Link = function () {
    this.insert = function (where) {
        var link = document.createElement('a');
        link.href = this.url;
        link.appendChild(document.createTextNode(this.url));
        where.appendChild(link);
    };
};

//子函數(shù)3:處理圖片
page.dom.Image = function () {
    this.insert = function (where) {
        var im = document.createElement('img');
        im.src = this.url;
        where.appendChild(im);
    };
};

那么我們?nèi)绾味x工廠處理函數(shù)呢?其實(shí)很簡(jiǎn)單:

復(fù)制代碼 代碼如下:

page.dom.factory = function (type) {
    return new page.dom[type];
}

使用方式如下:
復(fù)制代碼 代碼如下:

var o = page.dom.factory('Link');
o.url = 'http://www.cnblogs.com';
o.insert(document.body);

至此,工廠模式的介紹相信大家都已經(jīng)了然于心了,我就不再多敘述了。

總結(jié)

什么時(shí)候使用工廠模式

以下幾種情景下工廠模式特別有用:

1.對(duì)象的構(gòu)建十分復(fù)雜
2.需要依賴具體環(huán)境創(chuàng)建不同實(shí)例
3.處理大量具有相同屬性的小對(duì)象

什么時(shí)候不該用工廠模式

不濫用運(yùn)用工廠模式,有時(shí)候僅僅只是給代碼增加了不必要的復(fù)雜度,同時(shí)使得測(cè)試難以運(yùn)行下去。

相關(guān)文章

  • JavaScript利用正則表達(dá)式替換字符串中的內(nèi)容

    JavaScript利用正則表達(dá)式替換字符串中的內(nèi)容

    本文主要介紹了JavaScript利用正則表達(dá)式替換字符串中內(nèi)容的具體實(shí)現(xiàn)方法,并做了簡(jiǎn)要注釋,便于理解。具有一定的參考價(jià)值,需要的朋友可以看下
    2016-12-12
  • jJavaScript中toFixed()和正則表達(dá)式的坑

    jJavaScript中toFixed()和正則表達(dá)式的坑

    這篇文章主要介紹了jJavaScript中toFixed()和正則表達(dá)式的坑,toFixed方法可以把Number四舍五入為指定小數(shù)位數(shù)的數(shù)字,具體詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • javascript獲取select的當(dāng)前值示例代碼(兼容IE/Firefox/Opera/Chrome)

    javascript獲取select的當(dāng)前值示例代碼(兼容IE/Firefox/Opera/Chrome)

    本篇文章主要介紹了javascript獲取select的當(dāng)前值示例代碼(兼容IE/Firefox/Opera/Chrome) 需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • JS動(dòng)態(tài)添加iframe的代碼

    JS動(dòng)態(tài)添加iframe的代碼

    這篇文章主要介紹了JS動(dòng)態(tài)添加iframe的代碼,需要的朋友可以參考下
    2015-09-09
  • typescript枚舉的具體使用

    typescript枚舉的具體使用

    使用枚舉我們可以定義一些帶名字的常量,本文主要介紹了typescript枚舉的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 深入理解JavaScript系列(26):設(shè)計(jì)模式之構(gòu)造函數(shù)模式詳解

    深入理解JavaScript系列(26):設(shè)計(jì)模式之構(gòu)造函數(shù)模式詳解

    這篇文章主要介紹了深入理解JavaScript系列(26):設(shè)計(jì)模式之構(gòu)造函數(shù)模式詳解,本文講解了基本用法、構(gòu)造函數(shù)與原型、只能用new嗎?、強(qiáng)制使用new、原始包裝函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 最新評(píng)論