JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析


Posted in Javascript onJuly 26, 2018

本文实例讲述了JavaScript设计模式之工厂模式和抽象工厂模式定义与用法。分享给大家供大家参考,具体如下:

1、工厂模式:

虽然Object构造函数和对象字面量都可以用来创建单个对象,但这个方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。为了解决这个问题,开始使用工厂模式。

利用工厂模式,可以实现不指定特定的类而创建出对象,也就是说,不需要使用new关键字来创建特定类或子类的实例。

var TravelTeam = function(){};
TravelTeam.prototype = {
 register : function(model){
  var person;
  switch(type){
   case "student":
    person = new Student();
    break;
   case "teacher":
    person = new Teacher();
    break;
   default:
    person = new Doctor();
    break;
  }
  return person;
 }
}
var team = new TravelTeam();
team.register(student");

问题:大多数情形下使用没有问题,但扩展性不好,如需要添加一些新的队员类型,必须修改switch部分。

解决:工厂模式,把相同的部分单独出来交给一个简单的工厂对象:

var TeamFactory = {
 createTeam:function(type){
  var person;
  switch(type){
   case "student":
    person = new Student();
    break;
   case "teacher":
    person = new Teacher();
    break;
   default:
    person = new Doctor();
    break;
  }
  return person;
 }
}

TeamFactory是一个脱离于TravelTeam的单体,能降低耦合度,当需要添加一些新的队员类型的时候,只要修改TeamFactory工厂单体对象就行。

var TravelTeam = function(){};
TravelTeam.prototype = {
 register:function(type){
  var person = TeamFactory.createTeam(type);
  return person;
 }
}

工厂模式的问题:虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即不知道对象的类型)。

解决:构造器模式,请见://3water.com/article/144495.htm。

2、抽象工厂模式

在工厂模式的基础上进行更高层次的抽象,根据共同的用途或主题来抽象出一个最高层基础工厂类,其他具有相似行为的工厂类将继承于此工厂类。

最典型的例子是了解HTML5与HTML4表单域的不同之处后,抽象出最高层的表单域工厂类,HTML5表单域工厂类和HTML4表单域工厂类都继承自该类。

工厂模式与抽象工厂模式的不同:

① 当需要在代码的其余所有部分通过屏蔽较为复杂的对象创建方法来简化某些特定对象的创建过程时,使用工厂模式很适合;

② 当需要从现有代码中的多个类中,根据这些类之间共有的目的或通用的主题,创建出一个额外的抽象层,以降低应用程序的其余开发工作的复杂性时,使用抽象工厂模式很适合。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
Apr 06 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
Jun 27 Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
Nov 18 Javascript
Javascript 基础---Ajax入门必看
Jul 06 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
详解vue-router传参的两种方式
Sep 10 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
vue父组件异步获取数据传给子组件的方法
Jul 26 #Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 #Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 #Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
Jul 26 #Javascript
如何把vuejs打包出来的文件整合到springboot里
Jul 26 #Javascript
JavaScript中变量提升与函数提升经典实例分析
Jul 26 #Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 #Javascript
You might like
php时间戳转换的示例
2014/03/31 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
php实现微信发红包功能
2018/07/13 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue如何截取字符串
2019/05/06 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
python实现挑选出来100以内的质数
2015/03/24 Python
python3序列化与反序列化用法实例
2015/05/26 Python
使用Python对Access读写操作
2017/03/30 Python
python模块之paramiko实例代码
2018/01/31 Python
python实现学生信息管理系统
2020/04/05 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
python生成并处理uuid的实现方式
2020/03/03 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
电子商务网站的创业计划书
2014/01/05 职场文书
自我鉴定注意事项
2014/01/19 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
高中军训感言800字
2014/03/05 职场文书
药学职务聘任书
2014/03/29 职场文书
安全承诺书格式
2014/05/21 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS