欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

《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://www.dbjr.com.cn/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://www.dbjr.com.cn/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)文章

  • javascript實(shí)現(xiàn)秒表計(jì)時(shí)器的制作方法

    javascript實(shí)現(xiàn)秒表計(jì)時(shí)器的制作方法

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)秒表計(jì)時(shí)器的制作方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JavaScript如何讀取本地excel文件、txt文件的內(nèi)容

    JavaScript如何讀取本地excel文件、txt文件的內(nèi)容

    JavaScript是一種腳本語言,廣泛應(yīng)用于前端開發(fā),這篇文章主要給大家介紹了關(guān)于JavaScript如何讀取本地excel文件、txt文件的內(nèi)容,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 學(xué)會(huì)javascript之迭代器

    學(xué)會(huì)javascript之迭代器

    本文主要講解javascript之迭代器,在 JavaScript 中,迭代器是一個(gè)對象,它定義一個(gè)序列,并在終止時(shí)可能返回一個(gè)返回值。需要詳細(xì)了解相關(guān)知識(shí)的小伙伴可以參考一下這篇文章
    2021-09-09
  • javascript 禁用IE工具欄,導(dǎo)航欄等等實(shí)現(xiàn)代碼

    javascript 禁用IE工具欄,導(dǎo)航欄等等實(shí)現(xiàn)代碼

    在處理問題時(shí)候遇到的,就順便記錄與大家一起分享下,感興趣的朋友可以參考下哈,希望可以幫助到你
    2013-04-04
  • 淺談Fetch 數(shù)據(jù)交互方式

    淺談Fetch 數(shù)據(jù)交互方式

    這篇文章主要介紹了淺談Fetch 數(shù)據(jù)交互方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • JavaScript中的Function函數(shù)

    JavaScript中的Function函數(shù)

    函數(shù)是由事件驅(qū)動(dòng)的或者當(dāng)它被調(diào)用時(shí)執(zhí)行的可重復(fù)使用的代碼塊,接下來跟著小編一起來學(xué)習(xí)javascript中的function函數(shù),小伙伴們快來一起學(xué)習(xí)吧
    2015-08-08
  • Window.Open打開窗體和if嵌套代碼

    Window.Open打開窗體和if嵌套代碼

    這篇文章主要介紹了Window.Open打開窗體和if嵌套代碼的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • JS實(shí)現(xiàn)轉(zhuǎn)動(dòng)隨機(jī)數(shù)抽獎(jiǎng)特效代碼

    JS實(shí)現(xiàn)轉(zhuǎn)動(dòng)隨機(jī)數(shù)抽獎(jiǎng)特效代碼

    這篇文章主要為大家詳細(xì)介紹了一款轉(zhuǎn)動(dòng)隨機(jī)數(shù)抽獎(jiǎng)的JS特效代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 用函數(shù)式編程技術(shù)編寫優(yōu)美的 JavaScript_ibm

    用函數(shù)式編程技術(shù)編寫優(yōu)美的 JavaScript_ibm

    函數(shù)式編程語言在學(xué)術(shù)領(lǐng)域已經(jīng)存在相當(dāng)長一段時(shí)間了,但是從歷史上看,它們沒有豐富的工具和庫可供使用。隨著 .NET 平臺(tái)上的 Haskell 的出現(xiàn),函數(shù)式編程變得更加流行。一些傳統(tǒng)的編程語言,例如 C++ 和 JavaScript,引入了由函數(shù)式編程提供的一些構(gòu)造和特性。在許多情況下,JavaScript 的重復(fù)代碼導(dǎo)致了一些拙劣的編碼。如果使用函數(shù)式編程,就可以避免這些問題。此外,可以利用函數(shù)式編程風(fēng)格編寫更加優(yōu)美的回調(diào)。
    2008-05-05
  • JS截取字符串實(shí)例詳解

    JS截取字符串實(shí)例詳解

    這篇文章主要介紹了JS截取字符串的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了JavaScript截取字符串的常用函數(shù)與具體使用技巧,并附帶說明了JS截取字符串substr和substring方法的區(qū)別,需要的朋友可以參考下
    2015-11-11

最新評論