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

工厂模式设计模式

  工厂模式是软件工程领域一种广为人知的设计模式,而因为在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等,所以出现了构造函数模式。this

 

构造函数模式url

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

 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 = {},但工厂函数只能在局部添加
 
各自适用场合:
  构造函数:适应用于大型项目,属性以及方法时常变换的项目
  工厂函数:适应用于小型项目,或者正在制做过程尚未成型的项目
 
 
参考了一些资料,以及我的的一点看法,但愿能帮忙补充~~~
相关文章
相关标签/搜索