<!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. 读书笔记--《编写高质量代码:改善Python程序的91个建议》

      第一章 引论 建议写Pythonic式的代码,我理解为充分利用pythonAPI,用最简洁方式写出代码 1.两个变量交换: a, b = b, a 2.翻转list: a = [1, 2, 3, ...

  2. pytest-xdist分布式执行测试用例

    前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟.如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候,我们会用测试人力成本换取时间成本,这个时候多找个 ...

  3. java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig

    使用 MockMvc 模拟进行单元测试时出现以下的错误,网上看到的资料应该是说Spring4.0需要servlet3.0的支持? 在pom.xml更改servlet的版本依赖后即可

  4. 第 9 章 数据管理 - 075 - 配置 VirtualBox backend

    配置 VirtualBox backend 在 VirtualBox 宿主机上启动 vboxwebsrv 服务: C:\Program Files\Oracle\VirtualBox > VBo ...

  5. 使用Bootstrap Bar来增加Onboarding Progress Bar功能。

    git初始代码https://github.com/chentianwei411/at-mentions-with-action-text 首先,开分支onboardingbar. 然后, rails ...

  6. jieba库初级应用

    1.jieba库基本介绍 (1).jieba库概述 jieba是优秀的中文分词第三方库 - 中文文本需要通过分词获得单个的词语         - jieba是优秀的中文分词第三方库,需要额外安装 - ...

  7. hadoop知识点总结

    (一).hadoop的内置数据类型都实现了writablecompareable,以便序列化和网络传输及文件存储 a自定义数据类型作为输入 1.实现writable接口 2.如果给数据需要比较大小时, ...

  8. git-commit Angular规范

    commit message的格式 每次提交,Commit message 都包括三个部分:Header,Body 和 Footer. <type>(<scope>): < ...

  9. ASP.NET Razor - 标记

    目录 什么是 Razor? Razor 帮助器 ASP.NET Razor - C# 和 VB 代码语法 主要的 Razor C# 语法规则 它是如何工作的? 使用对象 If 和 Else条件 读取用 ...

  10. linux命令-diff对比文件工具

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...