电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JS設計模式入門和框架中的實踐

瀏覽:138日期:2024-05-26 15:56:52

在編寫JS代碼的過程中,運用一定的設計模式可以讓我們的代碼更加優雅、靈活。

下面筆者就結合諸如redux的subscribe、ES6的class、vue里面的$dispatch、jquery里面的on/off來給大家簡單介紹下設計模式在這些庫、語法和框架中的使用。

設計模式解決的問題

設計模式并不是很玄乎的知識,很多同學在編寫JS代碼的時候已經在不經意間用了不少設計模式了。

筆者認為把設計模式單獨抽象出來探討,就和算法中抽象出來冒泡、排序一樣,是為了描述一種常用的JS pattern。

通過研習這類pattern,讓模式來指導我們的代碼結構及JS算法。

一些常用的設計模式概述

1、observer [觀察者模式]

根據狀態的變化主動觸發觀察者隊列、hashMap的回調行為

一個簡單的觀察者模式代碼實踐

class StateTracker{constructor(){ this.observers = []; this.internalState= 10;}// 改變內部狀態,觸發狀態的觀察者列表change(val){ this.internalState= val; this.observers.forEach(observer=>observer(val));}// 注冊觀察者registerObserver(ObserverFn){ this.obserers.push(ObserverFn)} }

2、publish/subscribe [訂閱發布模式]

在代碼模塊的共享訪問空間存儲hashMap的topic/callback形式。

添加on/off/trigger等接口實現掛載、移除、觸發等動作。

一個簡單的訂閱發布模式代碼實踐

class PubSubHandler{constructor(){ this.eventPool = {};}//移除off(topicName){ delete this.observers[topicName]}//發布trigger(topicName,...args){ this.eventPool[topicName] && this.eventPool[topicName].forEach(callback=>callback(...args));}//訂閱on(topicName,callback){ let topic = this.eventPool[topicName] ; if(!topic){this.eventPool[topicName] =[] } this.eventPool[topicName].push(callback)} }

3、singleton[單例模式]

一個簡單的單例模式代碼實踐

var singleton = ()=>{var instance;var createInstance = ()=>{ this.a = 1; this.b = 2;}// 單例模式方法入口return { getInstance:()=>{if(!instance){ instance = createInstance();}return instance; }} } var test = singleton(); test.getInstance() == test.getInstance() //true

4、decorator裝飾者模式

這個模式就是在原有的對象上面裝飾更多行為,并且保持變量名不變。

用過ES7的@decorator或者python等語言的,應該對decorator不陌生的。

一個簡單的裝飾者模式代碼實踐

function decorator(sourceObj,decortorFn){decortorFn(sourceObj);return sourceObj } var d = {a:1}; // d變為了{a:1,b:1} d = decorator(d,(d)=>{d.b=1});

5、mixin混合模式

這個模式和decorator有點類似,只是它的功能更加垂直。

就是在原有的對象上面增加、覆蓋對象的行為。

相比于extends、Object.assign等方法,mixin模式更富有表現力。

mixin模式不能一概而論,可能依據不同的數據類型有不同的mixin策略,比如vue.mixin

一個簡單的混合模式代碼實踐

class StateTracker{constructor(){ this.raw = {a:1,b:2 }}// 混合模式方法入口mixin(obj){ Object.assign(this.raw,obj)} }

下面就針對常用的框架、語法、庫等來說明這些設計模式的應用。

observer模式在redux中的使用示例代碼

var store = createStore(reducer,initialState); //注冊redux store,存儲在 nextListeners數組 var test = store.subscribe(()=>{console.log(’我注冊了!’)}); // 取消注冊監聽 test.unsubscribe(); publish/subscribe在jquery中的使用示例代碼

$(document).on(’hello’,()=>{console.log(’hello’)}) $(document).trigger(’hello’); $(document).off(’hello’) decorator模式在react-redux中的實踐

//裝飾器 @connect(state=>state) class Container extends Component{render(){ return JSON.stringify(this.props) } } 總結

關于設計模式在前端框架或庫的實踐,我這邊寫的是比較簡略的, 可能沒有寫過相關代碼的同學不是特別好理解,有相關疑問的同學可以在文末直接提問。

希望本文能夠對大家學習和了解設計模式的概念有所了解

本文首發于筆者的 github blog

github設計模式教程代碼地址

來自:https://segmentfault.com/a/1190000012814591

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器| Win10系统下载_32位/64位系统/专业版/纯净版下载 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 求是网 - 思想建党 理论强党| 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | 旗帜网络笔记-免费领取《旗帜网络笔记》电子书 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 香蕉筛|直线|等厚|弧形|振动筛|香蕉筛厂家-洛阳隆中重工 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 2025第九届世界无人机大会| 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 陕西安闸机-伸缩门-车牌识别-广告道闸——捷申达门业科技 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 |