中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

《javascript設計模式》學習筆記五:Javascript面向對象程序設計工廠模式實例分析

發布時間:2020-08-23 08:27:10 來源:腳本之家 閱讀:160 作者:silentime 欄目:web開發

本文實例講述了Javascript面向對象程序設計工廠模式。分享給大家供大家參考,具體如下:

工廠模式和單例模式(https://www.jb51.net/article/184230.htm)應該是設計模式中應用最多的模式了,工廠模式的定義:提供創建對象的接口(來自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根據領導(調用者)的指示(參數),生產相應的產品(對象)。

1.簡單工廠模式

    簡單工廠也就是按照上面的定義,根據不同的參數返回不同的結果。

  //定義通用的對象類
  var car = function(){};
  //定義對象,對象內容省略,對象必須實現car定義的成員函數(yy一下車^_^)
  var benz = function(){};
  var bmw = function(){};
  var audi = function(){};

  //工廠方法
  var CarFactory = {
    createCar: function(brand){
       //private member of CarFactory
       var car;
       switch(brand){
        case 'benz':
          car = new benz();
          break;
        case 'bmw':
          car = new bmw();
          break;
        case 'audi':
          car = new audi();
          break;
        default:
          car = new bmw();
       }
       //可以不用理會下面這行代碼,這里是為了確保所有的品牌汽車都實現了car類的方法
       Interface.ensureImplements(car, Car);
       //返回對象
       return car;
     }
};
//如果我們要獲取一部汽車,只需要調用:
var mycar = CarFactory.createCar('bmw');
//不論是什么牌子的汽車,他應該都具有car的所有方法,因此即使不是同樣的對象,我們可以“透明”的調用他的方法

2.工廠模式

工廠模式與簡單工廠模式的區別在于工廠模式使用子類來創建對象,而不是一個獨立的類

//創建一個通用的工廠
var factory = function(){};
factory.prototype = {
  sellcar: function(brand){
    var car = this.createCar(brand);
    return car;
  },
  createCar: function(){
    throw new Error('unsupported operation on an abstract class');
  }
}

//北汽集團
var BJfactory = function(){};
//繼承自factory,請參考https://www.jb51.net/article/184227.htm面向對象之二繼承)
extend(BJfactory,factory);
//重寫汽車方法
BJfactory.prototype.createCar = function(brand){
  var car;
  switch(brand){
   case 'bmw':
     car = new BJbmw();
     break;
   case 'benz':
     car = new BJbenz();
     break;
   case 'audi':
     car = new BJaudi();
     break;
   default:
     car = new BJbmw();
  }
  Interface.ensureImplements(car, Car);
  return car;
}
//上汽
var SHfactory = function();
extend(SHfactory, factory);
//形式同北汽
……

//這樣一來,您在北京買車
var fac = new BJfactory();
//調用父類方法
var mycar = fac.sellcar('benz');
//在上海買車
fac = new SHfactory();
hercar = fac.sellcar('audi');
//注意標紅的兩行調用,調用者都是fac,其實是factory的兩個不同子類,但是調用方法都一樣,這就是工廠方法的使用

3.類比PHP(希望有助于理解1,2的內容,下面的類名只是實例,并非真實存在)

如果熟悉PHP的同學,也應該了解像PHP的數據庫類一般也是工廠模式,形如:

$db = DataBase.getInstance('mysql');
//這里的$db其實是new Mysql(),而無論是class Mysql,還是class Oracle,還是class MSsql都實現了下面的connect,query方法

$db->connect();
$db->query($sql);

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

措美县| 肇州县| 阳高县| 来凤县| 湘西| 布拖县| 仲巴县| 射洪县| 郸城县| 无为县| 基隆市| 龙门县| 无锡市| 若尔盖县| 明光市| 泸水县| 滦平县| 宾川县| 新巴尔虎左旗| 陵水| 武邑县| 舒城县| 社旗县| 纳雍县| 佛教| 疏勒县| 耿马| 逊克县| 稷山县| 永吉县| 和林格尔县| 永安市| 绥棱县| 定州市| 右玉县| 湟中县| 宾阳县| 石城县| 丰宁| 新田县| 林西县|