一。遇到的问题
在用socket接收数据时(包括前后端),会对不同功能的模块分开处理(满足单一开闭等原则),比如聊天模块,聊天里又区分世界聊天以及队伍聊天等,还有一些其他等模块,刚开始会用if else 或者switch 这些来对每个模块来处理,但后面发现,每一次模块的增加都要修改代码,而且 if 语句非常的长,于是使用策略模式来处理。(socket.io有这样的不同模块的分发功能,这里用websocket(websocket可以满足在苹果 安卓 web 微信等地方,但socket.io有些地方需要复杂一些的处理,比如socket.io自带有buffer,而微信中(还是微信小程序,不记得了)不允许有其他的buffer,就会出问题),所以要自个处理不同模块)
二。需要解决的问题
单一原则:每个模块的功能互不影响,功能单一
开闭原则:模块的增加和删除不修改原来的代码
三。策略模式
创建 strategy.js 文件
var strategies = { chat: function(message){
},
}
module.exports = strategies;
接着创建 websocket.js 文件
var strategy = require("./strategy"); 。。。 在接受到的地方直接使用,data[1] 为模块,比如chat模块,data[2] 为数据,需要前后端统一 strategy[data[1]](data[2]);
这样子socket的地方就不用再做处理了,全部转移到了strategy.js 文件,现在每个模块就单独在该模块的函数下处理了,增加模块就直接增加函数,在函数里面处理对应的逻辑,实现单一原则,但现在还没有实现开闭原则,接下来可以细点处理,把每个模块(就是对应的函数)自动映射成单独的文件。