javascript设计模式 ? 工厂模式原理与应用实例分析


Posted in Javascript onApril 09, 2020

本文实例讲述了javascript设计模式 ? 工厂模式原理与应用。分享给大家供大家参考,具体如下:

介绍:前面我们介绍了简单工厂模式,简单工厂模式存在一个严重的问题:当需要扩展时必定要修改工厂类的源代码。我们虽然在第二个demo中做了一些优化,但是我们需在使用时明确指定执行方法的名字,这无疑提高了使用成本。那如何实现增加新产品而不影响已有代码?工厂模式应运而生。

定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂模式让一个类的实例化延迟到其子类。工厂模式又称为工厂方法模式,又可称为虚拟构造器模式或多态工厂模式。工厂模式是一种类创建型模式。

场景:还是基于简单工厂模式的场景,我们试着用工厂模式解决弹窗类的问题。

示例:

var Dialog = function(){
  this.show = function(){
    console.log(this.name + ' is show -> ' + this.element);
  }
};
 
Dialog.createNotice = function(){
  var _dialog = new Dialog();
  _dialog.element = '<div>notice</div>';
  _dialog.name = 'notice';
  return _dialog;
};
 
Dialog.createToast = function(){
  var _dialog = new Dialog();
  _dialog.element = '<div>toast</div>';
  _dialog.name = 'toast';
  return _dialog;
};
 
Dialog.createWarnin = function(){
  var _dialog = new Dialog();
  _dialog.element = '<div>warnin</div>';
  _dialog.name = 'warnin';
  return _dialog;
};
 
 
var Factory = {};
 
Factory.NoticeFactory = function(){
  return Dialog.createNotice();
}
 
Factory.ToastFactory = function(){
  return Dialog.createToast();
}
 
Factory.WarninFactory = function(){
  return Dialog.createWarnin();
}
 
var notice = Factory.NoticeFactory();
var toast = Factory.ToastFactory();
var warnin = Factory.WarninFactory();
notice.show(); //notice is show -> <div>notice</div>
toast.show(); //toast is show -> <div>toast</div>
warnin.show(); //warnin is show -> <div>warnin</div>

对比简单工厂模式,工厂模式解决了什么问题呢?

最主要的就是将简单工厂模式的factory方法进行拆分

交由其子类也就是createToast方法实现

而将所有工厂入口拆成独立工厂类,之前的简单工厂模式在新增时需要修改工厂类,违反了开关原则

工厂模式保证新增时只做添加不做修改

项目足够大时,你可以将Factory和Dialog的子类拆成文件进行管理

在写工厂模式的这段时间,查了一些资料,发现每个人都有自己的理解

看到的一些工厂模式的demo更像是我们前面介绍简单工厂模式,为什么呢?

我们的demo参考的是java的书籍,这里面包含了抽象类这个概念,在前端只能靠自己的理解去描述

所以我们尽力通过一些差别来具体的介绍每一种模式

这里面的例子可能不是特别严谨,我后面会慢慢优化,写的详细一些只有一个目的

当有一天有人问我简单工厂模式和工厂模式的区别在哪,我希望我能给出一个我的理解

工厂模式总结:

优点:
* 增加新产品时,无需修改已存在的代码
* 只暴露工厂类,对具体实现封装在内部,使用时无需关注内部使用

缺点:
* 新增时还是需要新增具体实现以及提供具体的工厂类,一定程度增加了系统复杂度,会带来一些额外开销
* 每个工厂只生产一种产品,会导致存在大量的工厂类,大大增加了系统的维护成本和运行开销

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

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

Javascript 相关文章推荐
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
javascript移动开发中touch触摸事件详解
Mar 18 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
详解如何在Vue项目中导出Excel
Apr 19 Javascript
vue实现表单录入小案例
Sep 27 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
js Proxy的原理详解
May 25 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 #Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 #Javascript
微信小程序纯文本实现@功能
Apr 08 #Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 #Javascript
vue与iframe之间的信息交互的实现
Apr 08 #Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
Apr 08 #Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 #Javascript
You might like
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
php事件驱动化设计详解
2016/11/10 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
javascript知识点收藏
2007/02/22 Javascript
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
python实现划词翻译
2020/04/23 Python
从零学Python之入门(三)序列
2014/05/25 Python
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python脚本实现验证码识别
2018/06/07 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
服务生自我鉴定
2014/01/22 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
廉洁自律承诺书
2014/03/27 职场文书
2015年国庆节寄语
2015/08/17 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
生活委员竞选稿
2015/11/21 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Python制作一个随机抽奖小工具的实现
2021/07/07 Python