• *工厂方法模式(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设计模式》

  • 相关阅读:
    CxImage图像库的使用
    CxImage动态加载图片(判断图片文件类型)
    实现一个类似360的button
    cximage功能简介
    开源图像处理软件代码
    MFC + CxImage 实现自绘半透明按钮
    VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法
    时序数据库InfluxDB:简介及安装
    学习springboot整合mybatis并编写测试类
    Mybatis-Plus使用全解
  • 原文地址:https://www.cnblogs.com/daheiylx/p/13827423.html
Copyright © 2020-2023  润新知