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实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 Javascript
JavaScript中获取高度和宽度函数总结
Oct 08 Javascript
jQuery的内容过滤选择器学习教程
Apr 18 Javascript
js验证框架之RealyEasy验证详解
Jun 08 Javascript
Javascript 跨域知识详细介绍
Oct 30 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
layui: layer.open加载窗体时出现遮罩层的解决方法
Sep 26 Javascript
WEB前端性能优化的7大手段详解
Feb 04 Javascript
通过实例解析JavaScript常用排序算法
Sep 02 Javascript
如何理解Vue简单状态管理之store模式
May 15 Vue.js
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
php实现文件下载功能的几个代码分享
2014/05/10 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
python多进程操作实例
2014/11/21 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
Python模块future用法原理详解
2020/01/20 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
个人授权委托书格式
2014/08/30 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
机器人瓦力观后感
2015/06/12 职场文书
php中pcntl_fork详解
2021/04/01 PHP
PL350与SW11的比较
2021/04/22 无线电
python3实现无权最短路径的方法
2021/05/12 Python