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 相关文章推荐
getElementById在任意一款浏览器中都可以用吗的疑问回复
May 13 Javascript
JavaScript中的操作符==与===介绍
Dec 31 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Mar 06 Javascript
Javascript中的return作用及javascript return关键字用法详解
Nov 05 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
js实现各种复制到剪贴板的方法(分享)
Oct 27 Javascript
JavaScript Canvas绘制圆形时钟效果
Aug 20 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
vue.js父子组件通信动态绑定的实例
Sep 28 Javascript
vue页面切换过渡transition效果
Oct 08 Javascript
基于JS实现table导出Excel并保留样式
May 19 Javascript
js+canvas绘制图形验证码
Sep 21 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 PDO的一些认识小结
2015/01/23 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
深入理解Javascript闭包 新手版
2010/12/28 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
市场营销专业毕业生自荐信
2013/11/02 职场文书
信息管理员岗位职责
2013/12/01 职场文书
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
中学教师教育感言
2014/02/21 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
合伙经营协议书
2014/04/18 职场文书
作文批改评语大全
2014/04/23 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
中班上学期个人总结
2015/02/12 职场文书
基于Python实现射击小游戏的制作
2022/04/06 Python