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

Javascript設(shè)計模式理論與編程實戰(zhàn)之簡單工廠模式

 更新時間:2015年11月03日 09:38:25   作者:小灰狼的腦瓜  
簡單工廠模式是由一個方法來決定到底要創(chuàng)建哪個類的實例, 而這些實例經(jīng)常都擁有相同的接口. 這種模式主要用在所實例化的類型在編譯期并不能確定, 而是在執(zhí)行期決定的情況。 說的通俗點,就像公司茶水間的飲料機,要咖啡還是牛奶取決于你按哪個按鈕

閱讀目錄

基本介紹
舉例說明
總結(jié)說明

簡單工廠模式是由一個方法來決定到底要創(chuàng)建哪個類的實例, 而這些實例經(jīng)常都擁有相同的接口. 這種模式主要用在所實例化的類型在編譯期并不能確定, 而是在執(zhí)行期決定的情況。 說的通俗點,就像公司茶水間的飲料機,要咖啡還是牛奶取決于你按哪個按鈕。

簡單工廠模式在創(chuàng)建ajax對象的時候也非常有用.

通常我們創(chuàng)建對象最常規(guī)的方法就是使用new關(guān)鍵字調(diào)用構(gòu)造函數(shù),這會導(dǎo)致對象之間的依賴性。工廠模式是一種有助于消除類之間依賴性的設(shè)計模式,它使用一個方法來決定要實例化哪一個類。本文詳細(xì)介紹了簡單工廠模式的理論,并且舉例說明了簡單工廠模式的具體應(yīng)用。

基本介紹

簡單工廠模式是工廠模式中最基本的一種。通過定義一個工廠類,根據(jù)參數(shù)實例化具體的某個產(chǎn)品類。

舉例說明

我們舉個例子進行說明:假設(shè)我們開發(fā)一個旅游行業(yè)網(wǎng)站,網(wǎng)站上面銷售機票,酒店等產(chǎn)品。一個用戶準(zhǔn)備購買一張機票。我們可以定義相關(guān)類如下:

 var productEnums = {
   flight: "flight",
   hotel: "hotel"
 };
 function Flight() {
   console.log("This is Flight");
 }
 function Hotel() {
   console.log("This is Hotel");
 }
 function User() {
   this.shopCart = [];
 }
 User.prototype = {
   constructor: User,
   order: function (productType) {
     var product = null;
     switch (productType) {
       case productEnums.flight:
         product = new Flight();
       case productEnums.hotel:
         product = new Hotel();
       default:
     }
     this.shopCart.push(product);
   }
 }
 var user = new User();
 user.order(productEnums.flight);

這段代碼定義了三個類:用戶類User,機票類Flight,酒店類Hotel,其中User包含預(yù)訂方法。用戶預(yù)訂的時候直接傳入產(chǎn)品類型即可。這段代碼乍一看沒什么問題,但是需求和業(yè)務(wù)是隨時變化的,如果公司業(yè)務(wù)擴展,增加了簽證業(yè)務(wù),我們就要去修改User類來保證它支持簽證。我們當(dāng)然可以這么做,但直接去修改User類有什么不好呢,有沒有更好的方法呢?

首先要說的是User類,這個類是表示用戶類,而用戶類本質(zhì)上跟具體的某一類業(yè)務(wù)是無關(guān)的,也就是說,業(yè)務(wù)有可能隨時增加,但是用戶關(guān)于業(yè)務(wù)方面的代碼也就是創(chuàng)建產(chǎn)品訂單。新增的簽證業(yè)務(wù)本質(zhì)上和已經(jīng)存在的機票和酒店沒有什么區(qū)別,如果每增加一種業(yè)務(wù)就要去修改User類,這對代碼的穩(wěn)定性和可維護性大大的不好,更好的解決方法是有一個專門的創(chuàng)建訂單的類在管理不同的業(yè)務(wù),這個類就是簡單工廠。

我們修改代碼如下:

var productFactory = (function () {
   var productFactories = {
     "flight": function () {
       return new Flight();
     },
     "hotel": function () {
       return new Hotel();
     }
   };
   return {
     createProduct: function (productType) {
       return productFactories[productType]();
     }
   }
 })();
 User.prototype = {
   constructor: User,
   order: function (productType) {
     this.shopCart.push(productFactory.createProduct(productType));
   }
 }

這段代碼主要修改的地方有兩點:

(1)增加了一個產(chǎn)品工廠,根據(jù)不同的產(chǎn)品類型返回不同的對象

(2)修改User類的order方法為調(diào)用工廠類中的創(chuàng)建產(chǎn)品方法。

這樣做的好處是:

(1)使User的order方法更加專注,只做預(yù)訂產(chǎn)品這一功能,而提取創(chuàng)建產(chǎn)品訂單到專門的工廠類中,代碼更簡潔清晰

(2)一個專門管理product的factory,添加新產(chǎn)品很容易,不用再去修改User類

總結(jié)說明

簡單工廠模式的主要特點是將對象的創(chuàng)建和使用進行了分離,主要有3個部分組成:

1.對象使用類,該類是被工廠創(chuàng)造出來的使用者,與對象的種類和創(chuàng)建過程無關(guān)

2.工廠類,工廠類根據(jù)傳入的參數(shù)創(chuàng)建不同的對象并返回給對象使用類,包含了不同對象的創(chuàng)建過程,如果有不同的對象,則要修改該類

3.對象類,不同業(yè)務(wù)產(chǎn)生的不同類,就是工廠生產(chǎn)的產(chǎn)品

簡單工廠模式優(yōu)點

1.工廠類集中了所有對象的創(chuàng)建,便于對象創(chuàng)建的統(tǒng)一管理

2.對象的使用者僅僅是使用產(chǎn)品,實現(xiàn)了單一職責(zé)

3.便于擴展,如果新增了一種業(yè)務(wù),只需要增加相關(guān)的業(yè)務(wù)對象類和工廠類中的生產(chǎn)業(yè)務(wù)對象的方法,不需要修改其他的地方。

適用場景

1.需要根據(jù)不同參數(shù)產(chǎn)生不同實例,這些實例有一些共性的場景

2.使用者只需要使用產(chǎn)品,不需要知道產(chǎn)品的創(chuàng)建細(xì)節(jié)

注意:除非是適用場景,否則不可濫用工廠模式,會造成代碼的復(fù)雜度。

相關(guān)文章

  • JavaScript常見事件處理程序?qū)嵗偨Y(jié)

    JavaScript常見事件處理程序?qū)嵗偨Y(jié)

    這篇文章主要介紹了JavaScript常見事件處理程序,結(jié)合實例形式總結(jié)分析了javascript HTML事件、DOM事件、IE事件等相關(guān)處理程序與操作技巧,需要的朋友可以參考下
    2019-01-01
  • 微信小程序vant?輸入框問題處理方案

    微信小程序vant?輸入框問題處理方案

    這篇文章主要介紹了微信小程序vant輸入框問題,本文給大家分享完美解決方案,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • PHP讀取遠(yuǎn)程txt文檔到數(shù)組并實現(xiàn)遍歷

    PHP讀取遠(yuǎn)程txt文檔到數(shù)組并實現(xiàn)遍歷

    這篇文章主要介紹了PHP讀取遠(yuǎn)程txt文檔到數(shù)組并實現(xiàn)遍歷,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • vue中npm包全局安裝和局部安裝過程

    vue中npm包全局安裝和局部安裝過程

    這篇文章主要介紹了npm包全局安裝和局部安裝過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 淺談uniapp頁面跳轉(zhuǎn)的解決方案

    淺談uniapp頁面跳轉(zhuǎn)的解決方案

    頁面跳轉(zhuǎn)是經(jīng)常需要用到的,本文主要介紹了淺談uniapp頁面跳轉(zhuǎn)的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 小程序云函數(shù)調(diào)用API接口的方法

    小程序云函數(shù)調(diào)用API接口的方法

    這篇文章主要為大家詳細(xì)介紹了小程序云函數(shù)調(diào)用API接口的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • js實現(xiàn)拖拽與碰撞檢測

    js實現(xiàn)拖拽與碰撞檢測

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)拖拽與碰撞檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JavaScript實現(xiàn)班級抽簽小程序

    JavaScript實現(xiàn)班級抽簽小程序

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)班級抽簽小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 極致之美——百行代碼實現(xiàn)全新智能語言

    極致之美——百行代碼實現(xiàn)全新智能語言

    極致之美——百行代碼實現(xiàn)全新智能語言...
    2007-03-03
  • iframe 父窗口和子窗口相互的調(diào)用方法集錦

    iframe 父窗口和子窗口相互的調(diào)用方法集錦

    iframe 父窗口和子窗口相互的調(diào)用方法集錦,需要的朋友可以參考下。
    2010-12-12

最新評論

灵璧县| 靖宇县| 涟源市| 东莞市| 通州区| 潮安县| 葫芦岛市| 海安县| 海安县| 汉源县| 大新县| 黔江区| 霍山县| 平顶山市| 桓仁| 芒康县| 辽阳县| 东至县| 贵德县| 婺源县| 彰化市| 芦溪县| 宁明县| 名山县| 永兴县| 弥渡县| 襄城县| 尼玛县| 富锦市| 五原县| 景洪市| 定西市| 曲周县| 屯门区| 聂拉木县| 青铜峡市| 罗江县| 阳新县| 鄢陵县| 卢龙县| 宁国市|