zoukankan      html  css  js  c++  java
  • javascript设计模式简单介绍之【工厂模式】

    工厂模式分为两种,一种是简单工厂模式。另一种称之为工厂模式。

    简单工厂模式是使用一个外部的单体或者静态方法来生成实例。

    而工厂模式使用子类来决定内部成员要实现那个具体的类的实例。

    工厂模式要求被具体实现的类,必须提供相同的接口。

    下面我们将通过一段代码来讲述一个简单工厂模式的实现。

    function myMode(){
    
    }
    myMode.prototype = {
      create:function(){
        var mode = createmode.create(mode);
        mode.xxx();//可以对返回的mode执行任何你想要的操作
        return mode;
      }
    }
    
    var createdmode = (function(){  //一个单例
      return {
        creaet:function(mode){       var tmpMode;       switch(mode){         case 'mode1':           tmpMode = new mode1();           break;         case 'mode2':           tmpMode = new mode2();           break;         default:           tmpMode = new defamode();           break;       }       checkMode(mode,[xxx,xxx,xxx,xxx,xxx]);//checkMode的作用是检查mode是否实现了后面的[xxx]方法,如果没实现将抛出异常       return tpmMode;     }
      } })();
    function checkMode(obj,methods){   if(!(typeof obj == 'object')){     throw new Error("error");   }   for(var i=0,len=methods.length;i<len;i++){     var method = methods[i];     if(!obj[method] || typeof object[method] !== 'function'){       throw new Error('error');     }   } }

    通过上面的代码,便实现了简单工厂模式。首先我们有一个myMode,他有一个create方法,这个方法将返回一个mode。

    这个mode可以是任何对象。因为它是由一个外部单例所创造返回的mode。如果你想改变它,可以在外部单例里加入更多的case。

    只要它实现了规定的接口,那么它就是符合的工厂模式的。是可以被myMode直接使用的。这一样以来,就可以把所有的mode集中在一起管理。

    想要添加或者更改mode也变得容易。好了,简单工厂模式到此也就结束了。

    下面是今天在某个群讨论时,看到的一段对工厂模式的描述的比较好的话。便顺手摘抄了下来

    "后宫三千佳丽等待侍寝,大家都有名牌,一个太监把牌子拿上来,皇上翻,翻中一牌子给太监,太监去调这个女人(也许是男人),这个太监就相当于工厂,皇上给他参数,他根据参数去调用,但具体侍寝的事由后宫去实现,有的KJ,有的是XT,有的是TJ,有的是GJ,有的是XJ,各不相同"

    不要问我那些字母代表什么意思,我想大家都懂的~~~~

    不好意思,刚刚创建单例那里有点错误,已修正。

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/lynxcat/p/2442691.html
Copyright © 2011-2022 走看看