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 相关文章推荐
javascript判断用户浏览器插件安装情况的代码
Jan 01 Javascript
jquery文字上下滚动的实现方法
Mar 22 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
JQuery触发事件例如click
Sep 11 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
Apr 08 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
Nov 30 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
javascript每日必学之运算符
Feb 16 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
分析javascript原型及原型链
Mar 18 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
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
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
分享10段PHP常用代码
2015/11/11 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
在视频前插入广告
2006/11/20 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
微信小程序生成二维码的示例代码
2019/03/29 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
python字符串中的单双引
2017/02/16 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
Python遍历字典方式就实例详解
2019/12/28 Python
基于python实现地址和经纬度转换
2020/05/19 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
优秀中学生事迹材料
2014/01/31 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
横幅标语大全
2014/06/17 职场文书
银行奉献演讲稿
2014/09/16 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP