<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>工厂模式</title>
</head>
<body>
<script>
//让我们决定通过厂长告诉做什么事情,不需了解内部
/*模式作用:
1,对象的构建十分复杂,可以用此模式
2,需要依赖具体的环境创建不同的实例
3,处理大量具有相同属性的小对象。
注意事项:
1,不能滥用工厂,有时候是增加代码增加复杂度
2, */
</script>
<script>
/* 实例一个简单工厂
工厂应该有产长来决定运行哪些产品线
消费者 =》子类 */
//gongchang 是一个单例牧师
var gongchang = {};
gongchang.chanyifu =function(){
this.gongren = 50;
// alert('我们有工人数'+this.gongren);
}
gongchang.chanxie = function(){
alert('产鞋子')
}
gongchang.yunshu = function () {
alert('运输')
}
gongchang.changzhang = function (para) {
//new JS 构造函数模式 单例模式
return new gongchang[para]();
}
var me = gongchang.changzhang('chanyifu');
alert(me.gongren);
</script>
<script>
/*简单工厂 ajax*/
//单例,XMLHttpFactory一个简单工厂
var XMLHttpFactory = function(){};
//工厂里有createXMLHttp()方法 根据当前环境的具体情况返回一个XHR对象
XMLHttpFactory.createXMLHttp = function(){
var XMLHttp = null;
if (window.XMLHttpRequest){
XMLHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject){
XMLHttp = new ActiveXObject('Microsoft.XMLHTTP')
}
return XMLHttp;
};
var AjaxHander = function(){
//最后生产到 我拿到的对象 不用管工厂里做了什么事,
var XMLHttp = XMLHttpFactory.createXMLHttp();
//具体操作
}
</script>
<script>
/*以下是抽象复杂工厂*/
var XMLHttpFactory = function(){};
XMLHttpFactory.prototype = {
//调用这个的话 跑出一个错误,不能被实例化,只能用来派生子类 让别的子类来继承自己,然后做他们自己的事情
createFactory:function(){
throw new Error('这是一错误')
}
};
var XHRHander = function(){
XMLHttpFactory.call(this);
};
//将XMLHttpFactory的继承到XHRHander
XHRHander.prototype = new XMLHttpFactory();
//重新定义createFactory方法
XHRHander.prototype.constructor = XHRHander; XHRHander.prototype.createFactory = function () {
var XMLHttp = null;
if (window.XMLHttpRequest){
XMLHttp = new XMLHttpRequest()
}
else if(window.ActiveXObject){
XMLHttp = new ActiveXObject('Microsoft.XMLHTTP')
}
return XMLHttp;
} </script>
</body>
</html>

JS之工厂模式的更多相关文章

  1. JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法)

    JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法) 一丶正则的用法 创建正则对象: 方式一: var reg=new ...

  2. js对于工厂模式的理解

    有很多人对工厂模式有着这样或者那样不理解的地方,今天我就和大家分享一下我的心得. 其实工厂模式是基于面向对象的一种模式.大家先看这样的一段代码: 其实这个程序很简单,学过js的人都会写,基本没什么问题 ...

  3. JS 简单工厂模式,工厂模式(二)

    一.什么是工厂模式: 工厂模式就是用来创建对象的一种最常用的设计模式,我们不暴露创建对象的具体逻辑,而是将逻辑封装到一个函数中,那么,这个函数 就可以被视为一个工厂.那么,在实际项目中,我们是不是可以 ...

  4. js设计模式-工厂模式(抽象工厂)

    场景:定义一个抽象类 AbsProducer(生产商),该生产商有两个行为,一个生产,一个出售,其中生产方法为抽象方法,由具体的厂家(工厂)去实现,出售的产品均是电子产品(返回的对象为电子产品对象,即 ...

  5. js设计模式--工厂模式

    工厂模式: 工厂模式的目的是为了创建对象,它经常是在类和类的方法中实现.简单的工厂模式是由一个方法来决定到底要创建哪类的实例,这些实例经常拥有相同的接口,这种模式在所实例化的类型在编译期并不确定,而是 ...

  6. JS设计模式——工厂模式详解

    它的领域中同其它模式的不同之处在于它并没有明确要求我们使用一个构造器.取而代之,一个工厂能提供一个创建对象的公共接口,我们可以在其中指定我们希望被创建的工厂对象的类型. 简单工厂模式:使用一个类(通常 ...

  7. [js]js设计模式-工厂模式

    // 定义一个人 var p1 = { name: 'wxb', age: 22, writejs: function () { console.log(this.name + ' can sing. ...

  8. 浅谈js抽象工厂模式

    一.简单工厂 定义:简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 比如你去专门卖鼠标的地方你可以买各种各样的 ...

  9. JS "trycatch工厂模式"

    大家都用过Ajax的异步交互,下面的代码中使用  "trycatch工厂模式"  来进行针对Ajax请求对象的变化点进行封装 <script type="text/ ...

随机推荐

  1. Oracle 《积累章》 根据身份证号码更新当前出生日期

    ,),'yyyy-MM-dd') 函数使用 to_date()      日期转换函数 to_date(substr(t.sfzh,7,8),'yyyy-MM-dd')   将“19901212” 转 ...

  2. js的点滴

    一些好的博客 http://www.cnblogs.com/coding4/p/7809063.html canvas http://www.cnblogs.com/coding4/p/5593954 ...

  3. 一步一步搭建vue项目

    1 安装步骤 创建一个目录,我们这里定义为Vue 在Vue目录打开dos窗体,输入如下命令:vue create myproject 选择自定义   4. 先选择要安装的项目,我们这里选择4个   5 ...

  4. python 写文本文件出现乱码

    最近工作中想完善一下监控日志,同事说客户突然说我们最近几天推送的数据只有几家,赶紧看预警,应推4700多家,实推3400多家,用户可能是看错了,但我记得当时项目验收上线时,这个来源的推送数据肯定是可以 ...

  5. JSR107缓存规范

    Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry. CachingProvider定义了创建. ...

  6. CSS清除浮动的一种简便的方法

    在使用的浮动的元素的父元素添加该CSS样式 .clear{ overflow: auto; }

  7. android------个人项目(歆语气象通新版)

    歆语气象通: 歆语气象伴随你的身边,便捷生活. 包含了以下功能: 1. 天气预报数据覆盖中国城市和地区:2. 提供一周天气预报及最低最高温度,时刻关注天气,轻松计划出行:3. 各种指数详细信息,如太阳 ...

  8. xadmin邮箱验证码 标题 EmailVerifyRecord object

    [修改users-models模块] 1.如果这样不生效 def __unicode__(self): return '{0}({1})'.format(self.code, self.email) ...

  9. Bootstrap4 导航栏

    Bootstrap4 导航栏 目录 Bootstrap4 导航栏 动态选项卡 标准的导航栏 导航对齐方式 导航栏的组成 ul 元素中包含navbar-nav 类 表示导航栏中ul li元素中包含nav ...

  10. [转]关于Megatops BinCalc RPN计算器的说明

    最近收到几个好心人发来的邮件,指出我的BinCalc存在低级BUG,即1+1算出来不等于2--鉴于存在这种误解的人之多,俺不得不爬出来澄清一下--我的Megatops BinCalc当中的计算器是RP ...