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中animate动画积累的解决方法
Oct 05 Javascript
javascript检测移动设备横竖屏
May 21 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
Nov 10 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
Aug 25 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
详解vue-cli3多环境打包配置
Mar 28 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
Mar 25 Javascript
详解vue高级特性
Jun 09 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 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在各种web服务器的运行模式详解
2013/06/03 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
javascript中UMD规范的代码推演
2018/08/29 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
vue实现评论列表功能
2019/10/25 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
python创建关联数组(字典)的方法
2015/05/04 Python
python表格存取的方法
2018/03/07 Python
Python数据结构之图的应用示例
2018/05/11 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
珍珠奶茶店创业计划书
2014/01/11 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技