博客
电影
宝箱
友链
关于
<
ES6设计模式之单例模式
《纽伦堡的审判》影评
>
ES6设计模式之工厂模式
作者:
Cifer
类别: 技术·JS
时间:2018-02-24 13:25:40
字数:2229
版权所有,未经允许,请勿转载,谢谢合作~
附: [ES6设计模式之单例模式](http://www.boatsky.com/blog/23.html "ES6设计模式之单例模式") [ES6设计模式之观察者模式](http://www.boatsky.com/blog/40.html "ES6设计模式之观察者模式") #### 前言 设计模式是可复用的解决方案,JS因为脚本语言的出身问题,加上前端偏UI实现,对设计模式一方面不够重视,另一方面使用较少。而[西法](http://www.boatsky.com "太空船博客" rel="nofollow")查找相关资料,特别是ES6语法实现的,也是不多,所以分享一下。 设计模式经过考验,被人熟知,被用来抽象代码,可如果在不适当的地方强行套用,适得其反。 #### 工厂模式 Factory 假设一个场景:运动装备网店,它自己没有产品,等用户下单后,它需要找比如Nike,Adidas这样的工厂生产(设它们是自己生产的),然后发售 ```javascript //着装 class Clothing { constructor(params) { this.factory = params.factory; this.type = params.type; this.size = params.size; this.price = params.price; } publish() { console.log('publish: ' + this.factory + ',' + this.type + ',size ' + this.size + ',price ' + this.price); } } //抽象工厂 class AbstractFactory { static produce(params) { this.factory; if (params.factory === 'NikeFactory'){ this.factory = NikeFactory; } else if (params.factory === 'AdidasFactory') { this.factory = AdidasFactory; } //返回之前,可以抽象工厂的逻辑处理 return this.factory.produce(params); } } //nike工厂 class NikeFactory { static produce(params) { this.equipment; if (params.type === 'NikeTShirts'){ this.equipment = NikeTShirts; } else if (params.type === 'NikeWinterJacket') { this.equipment = NikeWinterJacket; } //返回之前,可以做nike工厂的逻辑处理 return new this.equipment(params); } } //adidas工厂 class AdidasFactory { static produce(params) { this.equipment; if (params.type === 'AdidasShoes'){ this.equipment = AdidasShoes; } else if (params.type === 'AdidasCap') { this.equipment = AdidasCap; } //返回之前,可以做adidas工厂的逻辑处理 return new this.equipment(params); } } //nike T 恤 class NikeTShirts extends Clothing { } //nike 冲锋衣 class NikeWinterJacket extends Clothing { } //adidas 鞋 class AdidasShoes extends Clothing { } //adidas 帽子 class AdidasCap extends Clothing { } ``` 测试 ```javascript let nikeWinterJacket = AbstractFactory.produce({ factory: 'NikeFactory', type: 'NikeWinterJacket', size: 'L', color: 'blue', price: 800, }); //true console.log(nikeWinterJacket instanceof NikeWinterJacket); //publish: NikeFactory,NikeWinterJacket,size L,price 800 nikeWinterJacket.publish(); ``` 省去了自己在各种new实例,提取公共部分。 优势:当对象、组件高复杂时,可抽象出来,满足一个API契约,便于解耦 劣势:创建对象的过程被隐藏在工厂内,增加代码复杂度,不便于定位问题
如果觉得有帮忙,您可以在本页底部留言。
相关推荐:
NPM发包流程与技巧
Puppeteer爬取豆瓣电影TOP250评分
基于vue实现腾讯云点播的上传与播放
JS代理Proxy与反射Reflect场景
轻应用PWA实践全过程
ES6迭代器Iterator原理与性能
JavaScript之Set与Map
ES6设计模式之观察者模式
解决toFixed四舍五入陷阱
深入理解IEEE754的64位双精度
ES6设计模式之单例模式
ES6二叉树的实现
JavaScript链表实例
JavaScript排序算法及性能比较
原生ajax及jQuery封装ajax实例
JavaScript类的语法糖
……
更多
<
ES6设计模式之单例模式
《纽伦堡的审判》影评
>
全部留言
我要留言
内容:
网名:
邮箱:
个人网站:
发表
全部留言