设计模式之策略模式(基于JS的编写及应用场景)
一.什么叫策略模式
策略模式是一种设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。举个不太成熟的例子:大概就是我们有穿衣服这个行为,但我们在春夏秋冬四个季节有我们不同的穿衣策略,选择穿不同的衣服。
二.优点
- 拓展性好,可以根据我们的需求,拓展更多的行为策略出来;
- 符合开闭原则,拓展策略的同时,不用修改原来的策略;
三.代码编写及应用场景
举个例子,如下图
在做到后台管理系统的时候,列表一般都会有,而且列表一般少不了增删查改 CURD操作。那我们对每个操作进行绑定对应的操作事件时,这般会这样写:
const onAdd = () => {//增加}
const onDel = () => {//删除}
const onSearch = () => {//查询}
const onEdit = () => {//编辑修改}
这种写法可行,但就是会比较累赘,因为要一下子定义4个方法。
而且万一这个页面不止有列表的增删查改CURD,还有什么其他的比如弹窗的CURD、抽屉的CURD,甚至二级列表的CURD等等,那定义的方法就很多了,一下子好家伙,需要4*N个方法了。
在这种时候,我们就可以利用策略模式的思路,对我们的方法进行改造了,让我们的代码看起来条理性清晰点,具体代码如下:
const tableOperateFunc = (type) => {
let operateObj = {
onAdd:()=>{//增加},
onDel:()=>{//删除},
onSearch:()=>{//查询},
onEdit:()=>{//修改},
}
operateObj[type]();
}
tableOperateFunc('onAdd')
像上面那样,我们可以把对table的操作,都汇总tableOperateFunc 这个方法里,并且通过对象key-键值的方式,对不同的操作方法进行定义,这样代码条理性看起来会清晰很多。
而且就算中途需要插入什么新的方法,比如reduce等等,那可以按需拓展,不会影响到原来的。