• 面向对象之工厂模式与构造函数模式的区别


    工厂模式

      工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象。其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可。

     1 function createBlog(name, url) {
     2   var o = new Object();
     3   o.name = name;
     4   o.url = url;
     5   o.sayUrl= function() {
     6     alert(this.url);
     7   }
     8   return o;
     9 }
    10  
    11 var blog1 = createBlog('wuyuchang', 'http://www.jb51.net/');

    可以看到工厂模式的实现方法非常简单,解决了创建多个相似对象的问题,但是工厂模式却无从识别对象的类型,因为全部都是Object,不像Date、Array等,因此出现了构造函数模式。

    构造函数模式

      ECMAScript中构造函数可以创建特定类型的对象,类似于Array、Date等原生JS的对象。其实现方法如下:

     1   function Blog(name, url) {
     2     this.name = name;
     3     this.url = url;
     4     this.alertUrl = function() {
     5       alert(this.url);
     6     }
     7   }
     8   var blog = new Blog('wuyuchang', 'http://www.jb51.net/');
     9   //即为Blog的实例,也为Object的实例
    10   console.log(blog instanceof Blog);  // true 
    11   console.log(blog instanceof Object);  // true
     
    构造函数与工厂函数之间差异:
    1.工厂函数需要创建对象,以及必须有返回值
    2.工厂函数针对的都是Object的对象模型,而构造函数可以匹配自定义的对象模型
      即前者不论创建什么都只有一个xx instanceof Object
      而后者根据自定义名而定类型,如上举例所示
    3.构造函数弊端,如果在全局中定义相同的局部变量,容易造成全局污染,因为this.xx如果在局部获取不到,就会去全局中获取
    4.构造函数可以重写,可以在全局中添加新属性和方法Person.prototype = {},但工厂函数只能在局部添加
     
    各自适用场合:
      构造函数:适应用于大型项目,属性以及方法时常变换的项目
      工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目
     
     
    参考了一些资料,以及个人的一点见解,希望能帮忙补充~~~
  • 相关阅读:
    简单记录下SpringCloud的微服务架构和一些概念
    Spring创建对象的几种方法
    几个设计模式总结
    为什么用B+树做索引&MySQL存储引擎简介
    Spring的ioc(DI)复习概念和原理简介
    spring bean中注入HttpServletRequest成员变量的思考(转载)
    类加载机制 + Classloader.loadClass(String name)和Class.forName(String name)
    记一下一道关于finally的题
    bio,nio,aio简介
    Integer一类的比较问题
  • 原文地址:https://www.cnblogs.com/laoniaofly/p/5945744.html
Copyright © 2020-2023  润新知