浅谈策略模式和柯里化的使用 #92
zhangyu1818
announced in
zh-cn
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
在开发中,遇到判断各种不同条件的情况是很常见的,使用策略模式,可以让我们去除
if else
,并且让逻辑低耦合最近开发的新功能,我使用策略模式对代码进行了一些小小的优化,给大家分享一手
新功能就是聊天,聊天有很多种信息类型,有文本信息、图片信息、音频信息、视频信息、文件信息、系统信息等,同时发送新消息也需要调用对应的创建信息函数
下面就以发送和创建不同的消息为例,浅谈策略模式和柯里化的使用
策略模式
在未使用策略模式的情况下,需要在一个函数里对所有类型进行判断,大概就会是这样
如果将渲染逻辑单独封装成另一个函数,这样至少将渲染逻辑抽离出来了
但是依旧没摆脱
if else
,如果哪一天需要新增渲染条件,就需要对主函数进行大改动。策略模式里至少由两部分组成,一个是一组策略类,封装了具体的算法(也就是上例种的渲染逻辑),另一个是环境类,用于将请求委托给一个策略类
实际在
javascript
中,函数是非常灵活的,所以不需要像传统的策略模式一样使用这样就不用依赖
if else
来做判断了,等于的判断在javascript
里也可以使用对象来代替,比如使用redux
的reducer
函数,也可以用对象来取代switch
上面是渲染消息使用了策略模式,同样的道理,渲染消息也能用策略模式来做,不过在实际写的时候,我发现柯里化才是发送信息的重点
柯里化
柯里化可以将多个参数的一个函数转化为多个一个或多个参数的函数,它的运用也非常常见了
先来看看,如果没有经过任何逻辑优化的创建消息函数
可以看到逻辑都是相同的,仅仅是调用函数不同,如果使用策略模式+柯里化
这样其实已经够了,但是如果我们想让创建消息和发送消息完全解藕呢,那就得把
tim.sendMessage
完全提取出来这样就将发送消息的逻辑和创建消息的逻辑完全分开了,不管后续会有什么新的种类消息,也仅仅只会使用
createMessage
创建一个新的对应消息的创建函数,再通过sendMessage
发送使用lodash来让柯里化更容易
手动创建柯里化函数通常只是达到了部分参数的功能,使用
lodash
提供的curry
方法可以让创建柯里化函数更简单还是非常有趣的
以上就是新功能开发的简单心得了,希望对同样前行的大家有帮助
虽然有看见说将部分参数函数和柯里化函数不是一个,这里我就将他们统称为柯里化了,主要在使用的过程中都非常相似的
Beta Was this translation helpful? Give feedback.
All reactions