<!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. react初探(一)之JSX、状态(state)管理、条件渲染、事件处理

    前言: 最近收到组长通知我们项目组后面新开的项目准备统一技术栈为react,目前我的情况是三大框架只会angular和Vue.在实际项目中只使用过一次angular5,其余项目都是使用Vue写的.写篇 ...

  2. vim 复制粘贴

    首先进入块模式 Ctrl+ v 使用按键j/k/h/l进行选中多列 使用按键y进行复制 在insert模式下:使用按键p进行粘贴

  3. java native用法

    说明: native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进行访问和操作,但是可以通过J ...

  4. Asp.net core Identity + identity server + angular 学习笔记 (第三篇)

    register -> login 讲了 我们来讲讲 forgot password -> reset password  和 change password 吧 先来 forgot pa ...

  5. [Linux] 文档编辑搜索

    vim filename press / type words which you want to search press Enter Q: How can I search only for wo ...

  6. Write Sling Servlet using a resource type and selector

    @SlingServlet( resourceTypes = "geometrixx/components/homepage", selectors = "data&qu ...

  7. Log4Net 常见格式说明(不断更新中)

    用户名  %username pc版本 另起一行 %newline

  8. 【论文速读】Multi-Oriented Scene Text Detection via Corner Localization and Region Segmentation[2018-CPVR]

    方法概述 该方法用一个端到端网络完成文字检测整个过程——除了基础卷积网络(backbone)外,包括两个并行分支和一个后处理.第一个分支是通过一个DSSD网络进行角点检测来提取候选文字区域,第二个分支 ...

  9. JAVA写接口傻瓜(?)教程(一)

    当一个安卓开发人员/微信小程序开发者想做点什么的时候,如果他发现没有合适的接口,那么单机安卓.本地数据库emmm.没了接口就好像老人没了拐杖.盲人没了墨镜,完全可以称得上是举步维艰.生活艰难到需要自己 ...

  10. PHP的openssl_encrypt方法的Java实现

    <?php class OpenSSL3DES { /*密钥,22个字符*/ const KEY='09bd821d3e764f44899a9dc6'; /*向量,8个或10个字符*/ cons ...