<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2213字,需瀏覽 5分鐘

           ·

          2021-03-18 10:08


          來源 | 看云

          介紹

          與創(chuàng)建型模式類似,工廠模式創(chuàng)建對(duì)象(視為工廠里的產(chǎn)品)時(shí)無需指定創(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)版本:
          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è)例子:

          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)的子類,我們先來定義子類的具體實(shí)現(xiàn)(也就是子函數(shù)):

          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)單:

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

          至此,工廠模式的介紹相信大家都已經(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)行下去。

          推薦閱讀

          編寫高質(zhì)量JavaScript代碼的基本要點(diǎn)

          揭秘命名函數(shù)表達(dá)式

          JavaScript設(shè)計(jì)模式之單例模式

          JavaScript設(shè)計(jì)模式之構(gòu)造函數(shù)模式

          設(shè)計(jì)模式之建造者模式



          本文完~

          瀏覽 23
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费黄色小视频 | 欧美性爱免费在线视频PK视频 | 夜夜躁狠狠躁日日躁麻豆护士 | 精品在线免费视频 | 欧美性爱 国产精品 |