zoukankan      html  css  js  c++  java
  • 面向对象之工厂模式与构造函数模式的区别

    工厂模式

      工厂模式是软件工程领域一种广为人知的设计模式,而由于在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 = {},但工厂函数只能在局部添加
     
    各自适用场合:
      构造函数:适应用于大型项目,属性以及方法时常变换的项目
      工厂函数:适应用于小型项目,或者正在制作过程还没有成型的项目
     
     
    参考了一些资料,以及个人的一点见解,希望能帮忙补充~~~
  • 相关阅读:
    人工智能与信息社会——人工智能发展简史
    人工智能与信息社会——新闻热点与身边的人工智能
    蓝桥杯——入门训练
    Android Studio安装虚拟机步骤
    Android开发环境搭建教程
    Android系统架构(图解)
    第6.7节 stack 1982 问题 B: Problem E
    Matlab高级教程_第二篇:MATLAB和C#对应数据类型的讲解(多讲一点儿C#的矩阵运算)
    Matlab高级教程_第二篇:一个简单的混编例子
    Matlab高级教程_第二篇:Matlab2016a和VS2013混合
  • 原文地址:https://www.cnblogs.com/laoniaofly/p/5945744.html
Copyright © 2011-2022 走看看