JS之工厂模式
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>工厂模式</title> 6 </head> 7 <body> 8 <script> 9 //让我们决定通过厂长告诉做什么事情,不需了解内部 10 /*模式作用: 11 1,对象的构建十分复杂,可以用此模式 12 2,需要依赖具体的环境创建不同的实例 13 3,处理大量具有相同属性的小对象。 14 注意事项: 15 1,不能滥用工厂,有时候是增加代码增加复杂度 16 2, 17 18 */ 19 </script> 20 <script> 21 /* 实例一个简单工厂 22 工厂应该有产长来决定运行哪些产品线 23 消费者 =》子类 24 25 */ 26 //gongchang 是一个单例牧师 27 var gongchang = {}; 28 gongchang.chanyifu =function(){ 29 this.gongren = 50; 30 // alert('我们有工人数'+this.gongren); 31 } 32 gongchang.chanxie = function(){ 33 alert('产鞋子') 34 } 35 gongchang.yunshu = function () { 36 alert('运输') 37 } 38 gongchang.changzhang = function (para) { 39 //new JS 构造函数模式 单例模式 40 return new gongchang[para](); 41 } 42 var me = gongchang.changzhang('chanyifu'); 43 alert(me.gongren); 44 </script> 45 <script> 46 /*简单工厂 ajax*/ 47 //单例,XMLHttpFactory一个简单工厂 48 var XMLHttpFactory = function(){}; 49 //工厂里有createXMLHttp()方法 根据当前环境的具体情况返回一个XHR对象 50 XMLHttpFactory.createXMLHttp = function(){ 51 var XMLHttp = null; 52 if (window.XMLHttpRequest){ 53 XMLHttp = new XMLHttpRequest(); 54 } 55 else if(window.ActiveXObject){ 56 XMLHttp = new ActiveXObject('Microsoft.XMLHTTP') 57 } 58 return XMLHttp; 59 }; 60 var AjaxHander = function(){ 61 //最后生产到 我拿到的对象 不用管工厂里做了什么事, 62 var XMLHttp = XMLHttpFactory.createXMLHttp(); 63 //具体操作 64 } 65 </script> 66 <script> 67 /*以下是抽象复杂工厂*/ 68 var XMLHttpFactory = function(){}; 69 XMLHttpFactory.prototype = { 70 //调用这个的话 跑出一个错误,不能被实例化,只能用来派生子类 让别的子类来继承自己,然后做他们自己的事情 71 createFactory:function(){ 72 throw new Error('这是一错误') 73 } 74 }; 75 var XHRHander = function(){ 76 XMLHttpFactory.call(this); 77 }; 78 //将XMLHttpFactory的继承到XHRHander 79 XHRHander.prototype = new XMLHttpFactory(); 80 //重新定义createFactory方法 81 XHRHander.prototype.constructor = XHRHander; 82 83 XHRHander.prototype.createFactory = function () { 84 var XMLHttp = null; 85 if (window.XMLHttpRequest){ 86 XMLHttp = new XMLHttpRequest() 87 } 88 else if(window.ActiveXObject){ 89 XMLHttp = new ActiveXObject('Microsoft.XMLHTTP') 90 } 91 return XMLHttp; 92 } 93 94 </script> 95 </body> 96 </html>