所谓的工厂模式,顾名思义就是成批量地生产模式。它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益。在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用。工厂模式定义创建对象的接口,但是让子类决定实例化哪个类。工厂方法将类的实例化延迟到子类

首先是创建构造函数,区别物种的不同属性。

//定义人的构造函数
var man = function(o) {this.foots = o.foot || 2;this.legs = o.legs || 2;
}//定义鱼的构造函数
var fish = function(o) {this.qi = o.qi || 4;this.foots = o.foots || 9;
}//定义外星人的构造函数
var et = function(o) {this.legs = o.legs ||10;this.eyes = o.eyes || 6;
}

接下来我们再创建一个工厂的构造函数:

//工厂函数的构造函数
var F = function() {}

接着在原型上设置它的默认方法:

//f的默认输出实例函数;
F.prototype.vehicleClass = man;

此时,该工厂函数默认生产的是man的实例,在不配置的情况下我们产生的是人类的实例,然后我们对vehicleClass这个函数进行扩充,生成一个新的函数,此函数可以对不同的类别进行甄别,

//类的甄别函数
F.prototype.vehicleCreate = function(o) {switch(o.vehicleType) {case 'man' :this.vehicleClass = man;break;case 'fish' :this.vehicleClass = fish;break;case 'et' :this.vehicleClass = et;break;}//返回实例return this.vehicleClass(o);
}

通过swith语句的索引,可以通过vehicleType进行不同类的实例化。那么我们看看这个类是如何工作的。首先时实例工厂类.

var Factory = new F();

然后调用vehicleCreate方法,通过传参获取不同实例的对象。

var Man = Factory.vehicleCreate({vehicleType : 'man',legs : 2,foots : 2
});

这样,通过vehicleType的值,我们可以告诉工厂类我们希望输出的物种,然后通过其他的属性,我们可以控制该物种实例的各种基础属性。

工厂模式适用于以下场景:

  1. 实例对象较复杂。
  2. 多对象的简单,快速的实现。
  3. 跟享元模类似,适用于拥有共同属性的对象。
  4. 只需要满足一个API契约的其他对象的实例对象。

工厂模式实现起来较为简单,不仅仅是工厂模式,几乎所有模式的代码看起来都比较简单。设计模式其实就是把经常用到的代码归纳总结系统的表达而已。在之后的应用中,我们可以系统地去想到这些模式并且运用它们。设计模式更代表的是一种系统思想,而不是重复的代码堆砌。

引用链接

Javascript设计模式(二)工厂模式相关推荐

  1. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  2. JavaScript设计模式-10.工厂模式实例xhr

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...

  3. 设计模式(二)-------------- 工厂模式

    这篇博客我想来说一下关于工厂模式的一些知识,工厂模式在Spring框架中运用是十分广泛的.由于Spring的控制反转思想,使得我们的一些bean都交由BeanFactory统一进行管理. 那么今天我就 ...

  4. 设计模式(二) ——工厂模式 (3种工厂模式的实现及优缺点)

    1. 工厂模式介绍 工厂模式(Factory Pattern) 是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.在工厂模式中,我们在创建对象时不 ...

  5. JavaScript设计模式———抽象工厂模式

    定义: 抽象工厂其实是实现子类继承父类的方法,只是一个方法.抽象工厂模式一般用在多人协作的超大型项目中,并且严格的要求项目以面向对象的思想进行完成. 简单工厂模式和工厂模式都是直接生产实例的,抽象工厂 ...

  6. 设计模式(二) 工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> Hello 回顾: 面向对象设计的基本原则 1.OCP(开闭原则): 一个应用的实体对扩展开放,对修改关闭.(白话: 现在我有 ...

  7. javascript设计模式-抽象工厂模式

    1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  8. javascript设计模式之工厂模式

    什么是工厂模式? 简单来说:工厂模式是一种 创建模式,用来解决创建对象的问题.根据参数类型,通过调用工厂方法来创建不同类型的对象. 为什么使用工厂模式? 当我们需要根据不同的需要来创建不同对象的时候, ...

  9. JavaScript设计模式 - 抽象工厂模式

    抽象工厂模式 这也是针对工厂模式无法应对多对象多复杂对象而出的一种模式,抽象工厂模式并不是直接生成实例,而是对于产品的一个分类的创建 class User {constructor(name, rol ...

  10. javascript设计模式--抽象工厂模式

    抽象工厂模式(abstract Fctory):通过对类的工厂抽象使其业务用于对产品类鏃的创建,而不负责创建某一类产品的实例. //汽车抽象类,当使用其实例对象的方法时会抛出错误var Car = f ...

最新文章

  1. retrofit2 spring接受参数_Spring面试中有可能遇到的问题
  2. [linux] Linux日志设置(转自抚琴煮酒)
  3. 单片机模块学习之LED
  4. vue中在当前组件中定义的全局变量怎么在methods中使用_Vue原理解析(十):搞懂事件API原理及在组件库中的妙用...
  5. python爬虫 入门+进阶_python爬虫入门到进阶(三)
  6. RedisSingleUtils 工具类
  7. 杨强教授领衔撰写,国内首本联邦学习实战的权威著作
  8. 话说地址栏的URL的最大长度
  9. SPSS新手教程——通过探索性分析,检验数据的正态性分布
  10. 李笑来《财富自由之路》思维导图
  11. MD通过vscode生成PDF(带目录标签)
  12. 【高通量测序】.dna文件批量读取CAG重复序列长度
  13. 失物招领小程序_可查询失物、可了解换乘,京港地铁今日上线微信小程序
  14. dlopen failed: empty/missing DT_HASH in quot;libx.soquot; (built with --hash-style=gnu?)
  15. linux服务器防攻击脚本,防止服务器被攻击的妙招(推荐)
  16. 计算机网络存在的漏洞,常见的计算机网络安全漏洞有哪些
  17. android地图画线,绘制折线-在地图上绘制-开发指南-Android 轻量版地图SDK | 高德地图API...
  18. 搭建网站的步骤有哪些?
  19. 面试官喜欢问的 设计模式之观察者模式
  20. WordCount单词统计笔记

热门文章

  1. 易筋SpringBoot 2.1 | 第三十三篇:SpringBoot Reactor响应式编程实战二 Redis Lettuce
  2. 从客户端登陆服务器的配置文件,从客户端登陆服务器的配置
  3. mysql语句解析_MYSQL中SQL执行分析
  4. 375.猜数字大小II
  5. python Tk()、Frame()、TopLevel()用法
  6. JSTL简介以及简单示例
  7. 取整运算⌊a⌋, ⌈a⌉的一些数学理论的总结
  8. dom不刷新 vue 加数据后_vue 数据更新 dom不渲染
  9. shell---字体颜色
  10. 哈希查找 C语言版