符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
这篇文章主要讲解了如何使用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 = 'notice'; _dialog.name = 'notice'; return _dialog; }; Dialog.createToast = function(){ var _dialog = new Dialog(); _dialog.element = 'toast'; _dialog.name = 'toast'; return _dialog; }; Dialog.createWarnin = function(){ var _dialog = new Dialog(); _dialog.element = 'warnin'; _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 ->noticetoast.show(); //toast is show ->toastwarnin.show(); //warnin is show ->warnin
抽象工厂模式主要解决的是Factory过多的问题,经过组合产生新的产品族。
我们这里的举例有些牵强,换个场景,如果我们有很多按钮啊,输入框之类的组件,要通过单独的工厂进行获取实例。
抽象工厂模式就是将特定的组件经过聚合产生新的工厂。
但这样的结果好还是不好,增加新的产品族时遵守了开关原则,但是在对新的产品族结构进行修改时就会发现需要从业务到工厂到子类挨个修改,也违反了开关原则。
所以抽象工厂模式的使用场景需要特别严谨,要在设计之初全面考虑,不要轻易对产品族结构进行修改。
抽象工厂模式总结:
优点:
* 当产品族被使用后,隔离了具体类的实现
* 新增产品族时很方便,无需修改已有结构,符合开关原则
缺点:
* 修改已有产品族结构时,需要修改工厂以及所有使用的业务代码。
前面我们介绍了三种工厂模式,在前端使用的过程中,要灵活的应用,使用其思想而不是生搬硬套。
工厂模式核心是通过不同参数来生成不同产品。抽象工厂和工厂是在实际场景下进行优化而来。
这也提醒我们,要不断地对代码进行思考,进行优化。
看完上述内容,是不是对如何使用javascript中的抽象工厂模式有进一步的了解,如果还想学习更多内容,欢迎关注创新互联行业资讯频道。