国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 13:02:13
字體:
來源:轉載
供稿:網友

介紹

與創建型模式類似,工廠模式創建對象(視為工廠里的產品)時無需指定創建對象的具體類。

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

這個模式十分有用,尤其是創建對象的流程賦值的時候,比如依賴于很多設置文件等。并且,你會經常在程序里看到工廠方法,用于讓子類類定義需要創建的對象類型。

正文

下面這個例子中,是應用了工廠方法對第26章構造函數模式代碼的改進版本:

復制代碼 代碼如下:

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);

不好理解的話,我們再給一個例子:

復制代碼 代碼如下:

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");

如果還不理解的話,那我們就再詳細一點咯,假如我們想在網頁面里插入一些元素,而這些元素類型不固定,可能是圖片,也有可能是連接,甚至可能是文本,根據工廠模式的定義,我們需要定義工廠類和相應的子類,我們先來定義子類的具體實現(也就是子函數):

復制代碼 代碼如下:

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

//子函數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);
    };
};

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

那么我們如何定義工廠處理函數呢?其實很簡單:

復制代碼 代碼如下:

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

使用方式如下:
復制代碼 代碼如下:

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

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

總結

什么時候使用工廠模式

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

1.對象的構建十分復雜
2.需要依賴具體環境創建不同實例
3.處理大量具有相同屬性的小對象

什么時候不該用工廠模式

不濫用運用工廠模式,有時候僅僅只是給代碼增加了不必要的復雜度,同時使得測試難以運行下去。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福建省| 沐川县| 合阳县| 历史| 开封县| 南木林县| 冷水江市| 阿拉善右旗| 绥德县| 兰坪| 吉木乃县| 洪湖市| 汶上县| 灌南县| 洪泽县| 泉州市| 高雄县| 寿宁县| 缙云县| 山东| 文昌市| 资兴市| 定边县| 九寨沟县| 定远县| 炎陵县| 横山县| 剑阁县| 崇州市| 桐梓县| 筠连县| 乐业县| 西华县| 太仆寺旗| 石河子市| 巴东县| 盐池县| 邯郸县| 东丰县| 辽阳县| 房产|