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 相关文章推荐
js控制table合并具体实现
Feb 20 Javascript
使用jQuery重置(reset)表单的方法
May 05 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
关于Javascript中defer和async的区别总结
Sep 20 Javascript
基于javascript的Form表单验证
Dec 29 Javascript
webpack入门必知必会
Jan 16 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
浅谈Vue.set实际上是什么
Oct 17 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 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 邮件发送问题解决
2014/03/22 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
详解Python中for循环是如何工作的
2017/06/30 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
艺术应用与设计个人的自我评价
2013/11/23 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
丽江古城导游词
2015/02/03 职场文书
保研导师推荐信
2015/03/25 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python