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 相关文章推荐
firefox浏览器下javascript 拖动层效果与原理分析代码
Dec 04 Javascript
javascript是怎么继承的介绍
Jan 05 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
jQuery unbind()方法实例详解
Jan 19 Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
swiper插件自定义切换箭头按钮
Dec 28 Javascript
JS和Canvas实现图片的预览压缩和上传功能
Mar 30 Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 Javascript
JS实现时间校验的代码
May 25 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 Javascript
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 Error与Logging函数的深入理解
2013/06/03 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
Python进阶篇之字典操作总结
2016/11/16 Python
python装饰器实例大详解
2017/10/25 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
python适合人工智能的理由和优势
2019/06/28 Python
Django 自定义分页器的实现代码
2019/11/24 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
什么是Web Service?
2012/07/25 面试题
销售人员个人求职信
2013/09/26 职场文书
学生自我鉴定范文
2013/10/04 职场文书
文秘大学生求职信
2014/02/25 职场文书
战友聚会策划方案
2014/06/13 职场文书
学雷锋标语
2014/06/25 职场文书
大专毕业生求职信
2014/07/05 职场文书
员工试用期自我评价
2014/09/18 职场文书
责任书范本大全
2015/05/11 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python