最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記五:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)工廠模式實(shí)例分析

 更新時(shí)間:2020年04月08日 08:35:59   作者:silentime  
這篇文章主要介紹了Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)工廠模式,結(jié)合實(shí)例形式分析了《javascript設(shè)計(jì)模式》中Javascript面向?qū)ο蠊S模式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)工廠模式。分享給大家供大家參考,具體如下:

工廠模式和單例模式(http://m.fzitv.net/article/184230.htm)應(yīng)該是設(shè)計(jì)模式中應(yīng)用最多的模式了,工廠模式的定義:提供創(chuàng)建對象的接口(來自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根據(jù)領(lǐng)導(dǎo)(調(diào)用者)的指示(參數(shù)),生產(chǎn)相應(yīng)的產(chǎn)品(對象)。

1.簡單工廠模式

    簡單工廠也就是按照上面的定義,根據(jù)不同的參數(shù)返回不同的結(jié)果。

  //定義通用的對象類
  var car = function(){};
  //定義對象,對象內(nèi)容省略,對象必須實(shí)現(xiàn)car定義的成員函數(shù)(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();
       }
       //可以不用理會(huì)下面這行代碼,這里是為了確保所有的品牌汽車都實(shí)現(xiàn)了car類的方法
       Interface.ensureImplements(car, Car);
       //返回對象
       return car;
     }
};
//如果我們要獲取一部汽車,只需要調(diào)用:
var mycar = CarFactory.createCar('bmw');
//不論是什么牌子的汽車,他應(yīng)該都具有car的所有方法,因此即使不是同樣的對象,我們可以“透明”的調(diào)用他的方法

2.工廠模式

工廠模式與簡單工廠模式的區(qū)別在于工廠模式使用子類來創(chuàng)建對象,而不是一個(gè)獨(dú)立的類

//創(chuàng)建一個(gè)通用的工廠
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');
  }
}

//北汽集團(tuán)
var BJfactory = function(){};
//繼承自factory,請參考http://m.fzitv.net/article/184227.htm面向?qū)ο笾^承)
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();
//調(diào)用父類方法
var mycar = fac.sellcar('benz');
//在上海買車
fac = new SHfactory();
hercar = fac.sellcar('audi');
//注意標(biāo)紅的兩行調(diào)用,調(diào)用者都是fac,其實(shí)是factory的兩個(gè)不同子類,但是調(diào)用方法都一樣,這就是工廠方法的使用

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

如果熟悉PHP的同學(xué),也應(yīng)該了解像PHP的數(shù)據(jù)庫類一般也是工廠模式,形如:

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

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

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

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS 文字符串轉(zhuǎn)換unicode編碼函數(shù)

    JS 文字符串轉(zhuǎn)換unicode編碼函數(shù)

    AJAX傳遞中文字符串時(shí)必須把中文字符串編碼成unicode,一般會(huì)用到JS的自帶函數(shù)escape().不過找到了更好的函數(shù)來確決中文字符轉(zhuǎn)換成unicode編碼的函數(shù)
    2009-05-05
  • js+html5實(shí)現(xiàn)canvas繪制鏤空字體文本的方法

    js+html5實(shí)現(xiàn)canvas繪制鏤空字體文本的方法

    這篇文章主要介紹了js+html5實(shí)現(xiàn)canvas繪制鏤空字體文本的方法,涉及html5文字效果的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 淺談Javascript嵌套函數(shù)及閉包

    淺談Javascript嵌套函數(shù)及閉包

    這篇文章其實(shí)是要講閉包的一些初級應(yīng)用,但是為了將閉包,我們還是從嵌套函數(shù)開始說吧,縱使所有的JavaScript函數(shù)都可以說是閉包,但是只有當(dāng)一個(gè)嵌套函數(shù)被導(dǎo)出到它所定義的作用域之外時(shí),這種閉包才是有趣的。
    2010-11-11
  • JS實(shí)現(xiàn)深度優(yōu)先搜索求解兩點(diǎn)間最短路徑

    JS實(shí)現(xiàn)深度優(yōu)先搜索求解兩點(diǎn)間最短路徑

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)深度優(yōu)先搜索求解兩點(diǎn)間最短路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實(shí)現(xiàn)

    uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了uniapp中uni.navigateBack返回后刷新頁面數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • JavaScript實(shí)現(xiàn)給數(shù)字添加千位分隔符

    JavaScript實(shí)現(xiàn)給數(shù)字添加千位分隔符

    這篇文章主要為大家詳細(xì)介紹了JavaScript如何實(shí)現(xiàn)給數(shù)字添加千位分隔符,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • js實(shí)現(xiàn)按鈕顏色漸變動(dòng)畫效果

    js實(shí)現(xiàn)按鈕顏色漸變動(dòng)畫效果

    這篇文章主要介紹了js實(shí)現(xiàn)按鈕顏色漸變動(dòng)畫效果的方法,涉及javascript鼠標(biāo)事件及頁面表單元素樣式的動(dòng)態(tài)操作技巧,需要的朋友可以參考下
    2015-08-08
  • 淺談Javascript中Object與Function對象

    淺談Javascript中Object與Function對象

    JavaScript的面向?qū)ο笫腔谠蔚?,所有對象都有一條屬于自己的原型鏈。Object與Function可能很多看Object instanceof Function , Function instanceof Object都為true而迷惑,所以首先看下對象的實(shí)例
    2015-09-09
  • js?fill函數(shù)填充數(shù)組或?qū)ο蟮慕鉀Q方法

    js?fill函數(shù)填充數(shù)組或?qū)ο蟮慕鉀Q方法

    這篇文章主要介紹了js?fill函數(shù)填充數(shù)組或?qū)ο蟮膯栴}及解決方法,本文給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • JS上傳圖片前的限制包括(jpg jpg gif及大小高寬)等

    JS上傳圖片前的限制包括(jpg jpg gif及大小高寬)等

    文件上傳之前的檢測,通常是通過文件名來判斷文件類型是否合法,但是要想檢測文件的大小很難辦到,除非在本地或者使用控件。使用JS可以輕松解決詞問題,js在上傳圖片前判斷大小 這個(gè)可以用javascript實(shí)現(xiàn),效果
    2012-12-12

最新評論

新昌县| 沈阳市| 伊宁市| 莱芜市| 临高县| 获嘉县| 托克托县| 铜梁县| 洪泽县| 柘荣县| 信宜市| 屏东县| 洛阳市| 泸西县| 丹棱县| 松滋市| 昂仁县| 仪陇县| 湖南省| 石屏县| 襄樊市| 墨江| 南和县| 大姚县| 长海县| 宝坻区| 蓬溪县| 丰顺县| 招远市| 保亭| 渭南市| 哈密市| 余干县| 公主岭市| 温宿县| 绥化市| 永登县| 治县。| 龙胜| 海门市| 吴堡县|