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 相关文章推荐
jquery选择器(常用选择器说明)
Sep 28 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
Jan 29 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
JavaScript中模拟实现jsonp
Jun 19 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
JS for...in 遍历语句用法实例分析
Aug 24 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
BootStrap Fileinput上传插件使用实例代码
Jul 28 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
jQuery实现的事件绑定功能基本示例
Oct 11 jQuery
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
搜索引擎技术核心揭密
2006/10/09 PHP
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
python任务调度实例分析
2015/05/19 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
使用Python更换外网IP的方法
2018/07/09 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
心理健康教育心得体会
2013/12/29 职场文书
自荐书范文范例
2014/02/13 职场文书
公司请假条格式
2014/04/11 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
幼师小班个人总结
2015/02/12 职场文书
支行行长岗位职责
2015/02/15 职场文书
简历自我评价优缺点
2015/03/11 职场文书
2015年测量员工作总结
2015/05/23 职场文书
导游词之日本富士山
2020/01/06 职场文书
Python 中random 库的详细使用
2021/06/03 Python
mysql中between的边界,范围说明
2021/06/08 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
Go 中的空白标识符下划线
2022/03/25 Golang