<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

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

      2012-02-23 08:31  湯姆大叔  閱讀(35749)  評論(17)    收藏  舉報

      介紹

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

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

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

      正文

      下面這個例子中,是應用了工廠方法對第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.rzrgm.cn';
      o.insert(document.body);

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

      總結

      什么時候使用工廠模式

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

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

      什么時候不該用工廠模式

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

      同步與推薦

      本文已同步至目錄索引:深入理解JavaScript系列

      深入理解JavaScript系列文章,包括了原創,翻譯,轉載等各類型的文章,如果對你有用,請推薦支持一把,給大叔寫作的動力。

      主站蜘蛛池模板: 乱人伦中文字幕成人网站在线| 日韩中文字幕有码av| 亚洲av久久精品狠狠爱av| 成人无码午夜在线观看| 大厂| 亚洲精品岛国片在线观看| 亚洲日韩一区二区| 97久久精品人人澡人人爽| 漂亮人妻中文字幕丝袜 | 国产美女裸身网站免费观看视频| 国产不卡在线一区二区| 国产精品久久久国产盗摄| 蜜臀91精品国产高清在线| 4399理论片午午伦夜理片| 国产精品普通话国语对白露脸| 日韩美女一区二区三区视频 | 蜜桃一区二区三区免费看| 又爽又黄又无遮掩的免费视频| 日韩成人午夜精品久久高潮| 国产97色在线 | 免| 丰满高跟丝袜老熟女久久| 精品人妻中文字幕在线| 午夜福利院一区二区三区| 重口SM一区二区三区视频| 男女高潮喷水在线观看| 麻豆一区二区三区蜜桃免费| 国产亚洲999精品AA片在线爽| 国产熟妇另类久久久久久| 灵台县| 少妇人妻真实偷人精品| 久久精品国产一区二区蜜芽| 亚洲 卡通 欧美 制服 中文 | 色爱综合另类图片av| 99在线精品国自产拍中文字幕| 蜜桃av亚洲精品一区二区| 91亚洲免费视频| 四虎永久在线精品无码视频| 无码人妻精品丰满熟妇区 | 久久不卡精品| 久久人人97超碰精品| 亚洲综合一区国产精品|