国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

meteor199 / 2899人閱讀

摘要:抽象工廠模式可以向客戶端提供一個(gè)接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對象。前邊的兩個(gè)都是直接生產(chǎn)實(shí)例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產(chǎn)工廠,其實(shí)抽象工廠其實(shí)是實(shí)現(xiàn)子類繼承父類的方法。

創(chuàng)建型模式
創(chuàng)建型模式是對一個(gè)類的實(shí)例化過程進(jìn)行了抽象,把對象的創(chuàng)建和對象的使用進(jìn)行了分離

上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,為什么把這兩個(gè)放在一起說,因?yàn)槲覀€(gè)人認(rèn)為他們兩個(gè)是有關(guān)聯(lián)的,簡單工廠模式被我看作是工廠模式的簡潔版,然后工廠模式被我看作是抽象工廠模式的簡潔版

簡單工廠
定義:簡單工廠模式中,可以根據(jù)參數(shù)的不同返回不同類的實(shí)例。簡單工廠模式專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。

比如你去專門賣鼠標(biāo)的地方你可以買各種各樣的鼠標(biāo)

最通俗的理解就是封裝,簡單帶過一下

    function mouse(color,long){
    
        var o = new Object();
    
        o.color= color;
                              
        o.long= long; 
    
        o.Explain= function(){
    
          console.log(this.color,this.long);
    
        }
    
        return o;
    
      }
    
    var mouseA = mouse("黑色",3);

工廠模式
定義:工廠方法模式中,工廠父類負(fù)責(zé)定義創(chuàng)建產(chǎn)品對象的公共接口,而工廠子類則負(fù)責(zé)生成具體的產(chǎn)品對象,這樣做的目的是將產(chǎn)品類的實(shí)例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應(yīng)該實(shí)例化哪一個(gè)具體產(chǎn)品類。

比如去旁邊還有個(gè)專門賣鍵盤的和耳機(jī)的然后他和賣鼠標(biāo)的組成了一個(gè)門店

你要進(jìn)如這個(gè)門店然后買鼠標(biāo)或者鍵盤或者耳機(jī)

你可以把這個(gè)工廠模式理解成是 進(jìn)化版的簡單工廠模式

    shop= function(val) {

      if(typeof this === "object") { //看看有沒有new   沒有new的話new一個(gè)
        var s = new this[val]();
        return s;
      } else {
        return new shop(val);
      }
    }
    
    
    shop.prototype = {
      mouse: function() {
        console.log("買了個(gè)鼠標(biāo)")
      },
         keyboard: function() {
        console.log("買了個(gè)鍵盤")
     }, 
        headset: function() {
        console.log("買了個(gè)耳機(jī)")
     } }
     bigShop = new shop();
     mouse = new bigshop.mouse();

抽象工廠模式
定義:抽象工廠模式是指當(dāng)有多個(gè)抽象角色時(shí),使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個(gè)接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對象。

前邊的兩個(gè)都是直接生產(chǎn)實(shí)例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產(chǎn)工廠,其實(shí)抽象工廠其實(shí)是實(shí)現(xiàn)子類繼承父類的方法。

說白了 抽象工廠模式 我認(rèn)為就是工廠功能模式的擴(kuò)充版,簡單工廠生產(chǎn)實(shí)例 ,工廠功能模式生產(chǎn)實(shí)例的接口,抽象工廠呢生產(chǎn)的是工廠

比如說上邊他們有了個(gè)電腦店的門店 現(xiàn)在電腦店火了 又開了一個(gè)電腦店 然后這兩個(gè)電腦店一個(gè)是聯(lián)想的 一個(gè)是戴爾的

     核心代碼
    let agency = function(subType, superType) {
      //判斷抽象工廠中是否有該抽象類
      if(typeof agency[superType] === "function") {
        function F() {};
        //繼承父類屬性和方法
        F.prototype = new agency[superType] ();
        //將子類的constructor指向子類
        subType.constructor = subType;
        //子類原型繼承父類
        subType.prototype = new F();
    
      } else {
        throw new Error("抽象類不存在!")
      }
    }

    這是創(chuàng)建工廠的類   好比專賣店

    //鼠標(biāo)抽象類
    agency.mouseShop = function() {
      this.type = "鼠標(biāo)";
    }
    agency.mouseShop.prototype = {
      getName: function() {
        return new Error("抽象方法不能調(diào)用");
      }
    }
    
    //鍵盤抽象類
    agency.KeyboardShop = function() {
      this.type = "鍵盤";
    }
    agency.KeyboardShop.prototype = {
      getName: function() {
        return new Error("抽象方法不能調(diào)用");
      }
    }
    

    
    //普通鼠標(biāo)子類
    function mouse(name) {
      this.name = name;
      this.item = ["買我,我線長","玩游戲賊溜"]
    }
    //抽象工廠實(shí)現(xiàn)鼠標(biāo)類的繼承
    agency(mouse, "mouseShop");
    //子類中重寫抽象方法
    mouse.prototype.getName = function() {
      return this.name;
    }
    
    //普通鍵盤子類
    function Keyboard(name) {
      this.name = name;
      this.item = ["行,你買它吧","沒鍵盤看你咋玩"]
    }
    //抽象工廠實(shí)現(xiàn)鍵盤類的繼承
    agency(Keyboard, "KeyboardShop");
    //子類中重寫抽象方法
    Keyboard.prototype.getName = function() {
      return this.name;
    }
    



最后放一下全部代碼

    
    let agency = function(subType, superType) {
      //判斷抽象工廠中是否有該抽象類
      if(typeof agency[superType] === "function") {
        function F() {};
        //繼承父類屬性和方法
        F.prototype = new agency[superType] ();
        //將子類的constructor指向子類
        subType.constructor = subType;
        //子類原型繼承父類
        subType.prototype = new F();
    
      } else {
        throw new Error("抽象類不存在!")
      }
    }
    
    //鼠標(biāo)抽象類
    agency.mouseShop = function() {
      this.type = "鼠標(biāo)";
    }
    agency.mouseShop.prototype = {
      getName: function() {
        return new Error("抽象方法不能調(diào)用");
      }
    }
    
    //鍵盤抽象類
    agency.KeyboardShop = function() {
      this.type = "鍵盤";
    }
    agency.KeyboardShop.prototype = {
      getName: function() {
        return new Error("抽象方法不能調(diào)用");
      }
    }
    
    
    
    //普通鼠標(biāo)子類
    function mouse(name) {
      this.name = name;
      this.item = ["買我,我線長","玩游戲賊溜"]
    }
    //抽象工廠實(shí)現(xiàn)鼠標(biāo)類的繼承
    agency(mouse, "mouseShop");
    //子類中重寫抽象方法
    mouse.prototype.getName = function() {
      return this.name;
    }
    
    //普通鍵盤子類
    function Keyboard(name) {
      this.name = name;
      this.item = ["行,你買它吧","沒鍵盤看你咋玩"]
    }
    //抽象工廠實(shí)現(xiàn)鍵盤類的繼承
    agency(Keyboard, "KeyboardShop");
    //子類中重寫抽象方法
    Keyboard.prototype.getName = function() {
      return this.name;
    }
    
    
    
    //實(shí)例化鼠標(biāo)
    let mouseA = new mouse("聯(lián)想");
    console.log(mouseA.getName(), mouseA.type); //聯(lián)想 鼠標(biāo)
    let mouseB = new mouse("戴爾");
    console.log(mouseB.getName(), mouseB.type); //戴爾 鼠標(biāo)
    
    //實(shí)例化鍵盤
    let KeyboardA = new Keyboard("聯(lián)想");
    console.log(KeyboardA.getName(), KeyboardA.type); //聯(lián)想 鍵盤
    let KeyboardB = new Keyboard("戴爾");
    console.log(KeyboardB.getName(), KeyboardB.type); //戴爾 鍵盤
    
    

我覺得這個(gè)抽象工廠的話 相對前兩種而言 組合比較靈活

抽象工廠不直接創(chuàng)建實(shí)例,個(gè)人認(rèn)為在大型項(xiàng)目的話應(yīng)該蠻實(shí)用的。

以上是個(gè)人的見解,接觸不多,有說的不對或不足之處,請批評指正。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105562.html

相關(guān)文章

  • 從ES6重新認(rèn)識JavaScript設(shè)計(jì)模式(): 工廠模式

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

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

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

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

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

    Muninn 評論0 收藏0

發(fā)表評論

0條評論

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