zoukankan      html  css  js  c++  java
  • *工厂方法模式(factory)

      简单工厂模式每次添加新需求,不仅要添加类,还要修改工厂函数。每次都要修改两个地方,这样太麻烦了,工厂方法模式则可以解决这个问题。

      工厂方法模式本意是说将实际创建对象工作推迟到子类中。这样核心类就变成了抽象类,但避免有人忽略new关键字,我们采用安全模式类。而我们将创建对象的基类放在工厂方法类的原型中。

      

     1 // 工厂方法模式
     2 // 安全模式创建工厂类,避免有人没写new关键字的情况
     3 var Factory = function(type, content) {
     4     if(this instanceof Factory) {
     5         var s = new this[type](content);
     6     }else {
     7         return new Factory(type, content);
     8     }
     9 }
    10 // 工厂原型中设置创建所有类型数据对象的基类
    11 Factory.prototype = {
    12     Java: function(content) {
    13         this.content = content
    14         console.log(this.content);
    15     },
    16     JavaScript: function(content) {
    17         console.log(content);
    18     },
    19     UI: function(content) {
    20         console.log(content)
    21     },
    22     PHP: function(content) {
    23         console.log(content);
    24     }
    25 }
    26 // 测试用例
    27 var data = [
    28     {type:'JavaScript', content:'JavaScript'},
    29     {type:'Java', content:'Java'},
    30     {type:'UI', content:'UI'},
    31     {type:'PHP', content:'PHP'},
    32 ]
    33 for(var i=0; i<data.length; i++) {
    34     Factory(data[i].type, data[i].content);
    35 }

      这样如果想添加其他类,只需要在Factory这个工厂类的原型里面添加就可以了。

     

    拓展:

      安全模式类式说可以屏蔽使用这对类的错误使用造成的错误。

      解决方案是在构造函数开始时先判断当前的this对象是不是类,如果是则通过new关键字创建对象;如果不是说明类在全局作用域中执行(通常情况下),那么既然在全局作用域中执行,当然this就会指向window(通常情况下,如非浏览器环境可为其他全局变量),这样就要重新返回新创建的对象了。

    参考资料:《JavaScript设计模式》

  • 相关阅读:
    java-03 方法
    cm 安装
    java-02 for循环,while循环
    java-01
    Storm入门,看这篇就够了
    Storm入门,看这篇就够了
    基于Spark的电影推荐系统(电影网站)
    基于Spark的电影推荐系统(实战简介)
    基于Spark的电影推荐系统(Scrapy爬虫)
    基于Spark的电影推荐系统(后台管理系统)
  • 原文地址:https://www.cnblogs.com/daheiylx/p/13827423.html
Copyright © 2011-2022 走看看