札早早

导航

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>

 

posted on 2017-06-05 00:42  札早早  阅读(116)  评论(0编辑  收藏  举报