<!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>

最新文章

  1. 安装Python环境时遇到的问题
  2. 深入理解javascript原型和闭包(4)——隐式原型
  3. [KOJ6997]旅行商问题二
  4. 【转】Myeclipse建立Maven项目
  5. 【读书笔记】iOS-NSNumber
  6. android 全屏视频播放(SurfaceView + MediaPlayer)
  7. Foundation和CoreFoundation之间的转换
  8. 基于python的接口测试学习笔记一(初出茅庐)
  9. 【转】unity3d的常用快捷键
  10. WebService开发实例(Axis2实现,无需安装,快速实现)
  11. C#路径,文件,目录,I/O常见操作
  12. ELK系列~nxlog实现多位置文件的收集
  13. Spring切面优先级
  14. Hive的DDL操作
  15. Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
  16. Python_匿名函数
  17. Python中关于列表排序并保留id/enumerate()使用方法
  18. Docker CE 镜像源站
  19. [Bayes] Multinomials and Dirichlet distribution
  20. const与readonly常量

热门文章

  1. Spring之bean的生命周期
  2. C# 批量新增的两种方法。
  3. IOS 模块并且发布到NPM
  4. 从vue源码看props
  5. CDH5.16.1集群新增节点
  6. java中,字符串和集合判断是否为空
  7. 安卓开发创建活动,布局,添加按钮,she使用Toast,设菜单,使菜单相关联等操作
  8. python 中的 yield 究竟为何物?生成器和迭代器的区别?
  9. http请求requestUtils
  10. js的短路