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


Posted in Javascript onApril 09, 2020

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

介绍:基于工厂模式,继续升级。来解决工厂模式存在多个工厂类的问题。主要的思想是将一些相关的产品组成一个产品族,由同一个工厂来统一生产。

定义:抽象工厂模式提供一个创建一系列相关或相互依赖的接口,而无须指定他们具体的类。抽象工厂模式又称kit模式,它是一种对象创建型模式。

场景:还是上面的Dialog类,如果继续向后发展,会有各种各样的弹窗,如果新增一个弹窗包含了notice和toast。这样的情况下,我们不需要再单独新增一个工厂类。我们需要对这一类具有同样特征的弹窗进行聚合。

示例:

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.ConvergeFactory = function(){
  return {
    getNotice: function(){
      return Dialog.createNotice();
    },
    getToast: function(){
      return Dialog.createToast();
    },
 getWarnin: function(){
     return Dialog.createWarnin();
 }
  }
}
 
var converge = Factory.ConvergeFactory();
var notice = converge.getNotice();
var toast = converge.getToast();
var warnin = converge.getWarnin();
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过多的问题,经过组合产生新的产品族。

我们这里的举例有些牵强,换个场景,如果我们有很多按钮啊,输入框之类的组件,要通过单独的工厂进行获取实例。

抽象工厂模式就是将特定的组件经过聚合产生新的工厂。

但这样的结果好还是不好,增加新的产品族时遵守了开关原则,但是在对新的产品族结构进行修改时就会发现需要从业务到工厂到子类挨个修改,也违反了开关原则。

所以抽象工厂模式的使用场景需要特别严谨,要在设计之初全面考虑,不要轻易对产品族结构进行修改。

抽象工厂模式总结:

优点:
* 当产品族被使用后,隔离了具体类的实现
* 新增产品族时很方便,无需修改已有结构,符合开关原则

缺点:
* 修改已有产品族结构时,需要修改工厂以及所有使用的业务代码。

前面我们介绍了三种工厂模式,在前端使用的过程中,要灵活的应用,使用其思想而不是生搬硬套。

工厂模式核心是通过不同参数来生成不同产品。抽象工厂和工厂是在实际场景下进行优化而来。

这也提醒我们,要不断地对代码进行思考,进行优化。

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

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

Javascript 相关文章推荐
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
Jun 12 Javascript
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
window.onload使用指南
Sep 13 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
整理一下常见的IE错误
Nov 18 Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 Javascript
微信小程序 WebSocket详解及应用
Jan 21 Javascript
微信小程序实现图片上传功能
May 28 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
Nov 13 Javascript
echarts饼图各个板块之间的空隙如何实现
Dec 01 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
Apr 09 #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
You might like
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
python如何实现内容写在图片上
2018/03/23 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
瀑布模型都有哪些优缺点
2014/06/23 面试题
团队精神演讲稿
2013/12/31 职场文书
工程项目建议书范文
2014/03/12 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
班干部演讲稿
2014/04/24 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
七年级语文教学反思
2016/03/03 职场文书
了解Redis常见应用场景
2021/06/23 Redis