成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

js設(shè)計(jì)模式 --- 工廠設(shè)計(jì)模式(抽象工廠)

fuchenxuan / 2755人閱讀

摘要:工廠設(shè)計(jì)模式工廠設(shè)計(jì)模式顧名思義就是生產(chǎn)對(duì)象的工廠在這里需要注意的是生產(chǎn)的對(duì)象都是同一規(guī)格的具有某些相同的特性否則工廠模式的意義蕩然無存接口在工廠模式中有著重要的作用如果對(duì)生產(chǎn)的對(duì)象不實(shí)現(xiàn)某個(gè)接口試問我們?yōu)槭裁催€要工廠模式工廠模式使得我們創(chuàng)

工廠設(shè)計(jì)模式
工廠設(shè)計(jì)模式, 顧名思義就是生產(chǎn)對(duì)象的工廠, 在這里需要注意的是生產(chǎn)的對(duì)象都是同一規(guī)格的, 具有某些相同的特性, 否則工廠模式的意義蕩然無存
接口在工廠模式中有著重要的作用, 如果對(duì)生產(chǎn)的對(duì)象不實(shí)現(xiàn)某個(gè)接口, 試問我們?yōu)槭裁催€要工廠模式, 工廠模式使得我們創(chuàng)建的所有事例可以一視同仁, 屏蔽了不同對(duì)象的區(qū)別, 因?yàn)樗麄儗?shí)現(xiàn)的同樣的接口
簡(jiǎn)單工廠

簡(jiǎn)單工廠就是工廠所生產(chǎn)的產(chǎn)品雖然都符合接口規(guī)范, 但產(chǎn)品無法分類, 這里簡(jiǎn)單舉一個(gè)商店出售自行車的例子, 則所生產(chǎn)的自行車都實(shí)現(xiàn)了自行車的規(guī)范, 但自行車無法分辨廠家

    let BicycleShop = (function () {
    
      /* BicycleFactory namespace. */
      let BicycleFactory = {
        createBicycle: function(model) {
          let bicycle;
          
          switch(model) {
            case "The Speedster":
              bicycle = new Speedster();
              break;
            case "The Lowrider":
              bicycle = new Lowrider();
              break;
            case "The Comfort Cruiser":
            default:
              bicycle = new ComfortCruiser();
          }
          
          Interface.ensureImplements(bicycle, Bicycle);
          return bicycle;
        }
      };
    
      /* BicycleShop class, improved. */
    
      let BicycleShop = function() {};
      BicycleShop.prototype = {
        sellBicycle: function(model) {
          var bicycle = BicycleFactory.createBicycle(model);
          
          bicycle.assemble();
          bicycle.wash();
          
          return bicycle;
        }
      };
      return BicycleShop;
    
    })();
    /* The Bicycle interface. */
    
    var Bicycle = new Interface("Bicycle", ["assemble", "wash", "ride", "repair"]);
    
    /* Speedster class. */
    
    var Speedster = function() { // implements Bicycle
      ...
    };
    Speedster.prototype = {
      assemble: function() {
        ...
      },
      wash: function() {
        ...
      },
      ride: function() {
        ...
      },
      repair: function() {
        ...
      }
    };
    
    
    /* Usage. */
    
    var californiaCruisers = new BicycleShop();
    var yourNewBike = californiaCruisers.sellBicycle("The Speedster");

簡(jiǎn)單工廠的弊端在于所有的對(duì)象都有工廠類來實(shí)現(xiàn), 無法對(duì)對(duì)象分類, 降低了拓展性, 比如如果有膜拜自行車專賣店和ofo自行車專賣店呢, 所以簡(jiǎn)單的業(yè)務(wù)簡(jiǎn)單工廠就夠了, 如果面對(duì)復(fù)雜業(yè)務(wù)邏輯則需要抽象工廠模式
抽象工廠

真正的工廠模式與簡(jiǎn)單工廠區(qū)別在于, 它不是使用工廠類來生產(chǎn)對(duì)象的, 而是使用其子類, 將其成員對(duì)象的實(shí)例化推遲到子類中, 這樣就可以對(duì)自行車進(jìn)行分類, 例如工廠類為接口或抽象類, 膜拜自行車工廠和ofo自行車工廠為子類, 當(dāng)然這兩家的自行車都實(shí)現(xiàn)了自行車接口, 下面如圖所示;

首先定義一個(gè)工廠類

    var BicycleShop = (function() {
    
      let BicycleShop = function() {};
      BicycleShop.prototype = {
        sellBicycle: function(model) {
          var bicycle = this.createBicycle(model);      
          return bicycle;
        },
        createBicycle: function(model) {
          throw new Error("Unsupported operation on an abstract class.");
        }
      };
      return  BicycleShop
    })();

然后定義多個(gè)繼承工廠類的基于分類的類

    let AcmeBicycleShop = (function() {
    
      /* AcmeBicycleShop class. */
    
      let AcmeBicycleShop = function() {};
      extend(AcmeBicycleShop, BicycleShop);
      AcmeBicycleShop.prototype.createBicycle = function(model) {
        let bicycle;
    
        switch(model) {
          case "The Speedster":
            bicycle = new AcmeSpeedster();
            break;
          case "The Lowrider":
            bicycle = new AcmeLowrider();
            break;
          case "The Flatlander":
            bicycle = new AcmeFlatlander();
            break;
          case "The Comfort Cruiser":
          default:
            bicycle = new AcmeComfortCruiser();
        }
    
        Interface.ensureImplements(bicycle, Bicycle);
        return bicycle;  
      };
      return AcmeBicycleShop
    })();
    
    var GeneralProductsBicycleShop = (function() {
    
      /* GeneralProductsBicycleShop class. */
    
      let GeneralProductsBicycleShop = function() {};
      extend(GeneralProductsBicycleShop, BicycleShop);
      GeneralProductsBicycleShop.prototype.createBicycle = function(model) {
        let bicycle;
    
        switch(model) {
          case "The Speedster":
            bicycle = new GeneralProductsSpeedster();
            break;
          case "The Lowrider":
            bicycle = new GeneralProductsLowrider();
            break;
          case "The Flatlander":
            bicycle = new GeneralProductsFlatlander();
            break;
          case "The Comfort Cruiser":
          default:
            bicycle = new GeneralProductsComfortCruiser();
        }
    
        Interface.ensureImplements(bicycle, Bicycle);
        return bicycle;
      };
    
    
    })();

最后使用

    /* Usage. */
    
    var alecsCruisers = new AcmeBicycleShop();
    var yourNewBike = alecsCruisers.sellBicycle("The Lowrider");
    
    var bobsCruisers = new GeneralProductsBicycleShop();
    var yourSecondNewBike = bobsCruisers.sellBicycle("The Lowrider");
抽象工廠模式可以把公共代碼放在父類中, 個(gè)體性的代碼放在子類中, 責(zé)任分離的同時(shí)提高拓展性

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107360.html

相關(guān)文章

  • js常用設(shè)計(jì)模式實(shí)現(xiàn)(二)工廠模式抽象工廠模式

    摘要:抽象工廠模式可以向客戶端提供一個(gè)接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。前邊的兩個(gè)都是直接生產(chǎn)實(shí)例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產(chǎn)工廠,其實(shí)抽象工廠其實(shí)是實(shí)現(xiàn)子類繼承父類的方法。 創(chuàng)建型模式 創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離 上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,...

    meteor199 評(píng)論0 收藏0
  • 一天一個(gè)設(shè)計(jì)模式JS實(shí)現(xiàn)——工廠模式

    摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的...

    Muninn 評(píng)論0 收藏0
  • JS 設(shè)計(jì)模式 七(抽象工廠模式

    摘要:抽象工廠模式抽象工廠是工廠模式的升級(jí)版,他用來創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象。代碼抽象工廠模式抽象工廠的優(yōu)點(diǎn)抽象工廠模式除了具有工廠方法模式的優(yōu)點(diǎn)外,最主要的優(yōu)點(diǎn)就是可以在類的內(nèi)部對(duì)產(chǎn)品族進(jìn)行約束。 抽象工廠模式 抽象工廠是工廠模式的升級(jí)版,他用來創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象。上節(jié)學(xué)習(xí)了工廠模式,類的創(chuàng)建依賴工廠類,程序需要擴(kuò)展時(shí),我們必須創(chuàng)建新的工廠類。工廠類是用來生產(chǎn)產(chǎn)品的,那我...

    FuisonDesign 評(píng)論0 收藏0
  • JS 抽象工廠模式

    摘要:簡(jiǎn)介抽象工廠模式就是通過類的抽象使得業(yè)務(wù)適用于一個(gè)產(chǎn)品類簇的創(chuàng)建,而不負(fù)責(zé)某一類產(chǎn)品的實(shí)例。通過抽象工廠,就可以創(chuàng)建某個(gè)類簇的產(chǎn)品,并且也可以通過來檢查產(chǎn)品的類別,也具備該類簇所必備的方法。 0. 簡(jiǎn)介 抽象工廠模式(Abstract Factory)就是通過類的抽象使得業(yè)務(wù)適用于一個(gè)產(chǎn)品類簇的創(chuàng)建,而不負(fù)責(zé)某一類產(chǎn)品的實(shí)例。 JS中是沒有直接的抽象類的,abstract是個(gè)保留字,但...

    RiverLi 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(二): 工廠模式

    摘要:簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式又叫靜態(tài)工廠模式,由一個(gè)工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例。工廠方法模式工廠方法模式的本意是將實(shí)際創(chuàng)建對(duì)象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創(chuàng)建對(duì)象的一種最常用的設(shè)計(jì)模式。我們不暴露創(chuàng)建對(duì)象的具體邏輯,而是將將邏輯封裝在一個(gè)函數(shù)中,那么這個(gè)函數(shù)就可以被視為一個(gè)工廠。工廠模式根據(jù)抽象程度的不...

    Reducto 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(二): 工廠模式

    摘要:簡(jiǎn)單工廠模式簡(jiǎn)單工廠模式又叫靜態(tài)工廠模式,由一個(gè)工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例。工廠方法模式工廠方法模式的本意是將實(shí)際創(chuàng)建對(duì)象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創(chuàng)建對(duì)象的一種最常用的設(shè)計(jì)模式。我們不暴露創(chuàng)建對(duì)象的具體邏輯,而是將將邏輯封裝在一個(gè)函數(shù)中,那么這個(gè)函數(shù)就可以被視為一個(gè)工廠。工廠模式根據(jù)抽象程度的不...

    szysky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<