怎么消灭太多if case 嵌套,代码好用好维护,工厂模式帮你忙

前几天看到了猫大师准备用工厂模式来代替多if判断,然后试一下如何在vfp里使用工厂模式来处理多if的判断,

在只有一个判断参数的情况下,已导出excel为例子,写多判断的时候可能都是这么写

export_type = "zw"DO CASE  case export_type="zw"    MESSAGEBOX("导出zw.excel")  case export_type="ls"    MESSAGEBOX("导出ls.excel")  case export_type="ww"    MESSAGEBOX("导出ww.excel")    OTHERWISE  MESSAGEBOX("无此格式")ENDCASE

缺点猫大师也说过了,逻辑复杂,维护性差。

想解决多判断,前提就是从自己手写判断,到利用代码机制或者对象方法或者某种API来帮我们判断,还是以导出excel为例子

工厂模式,就是你的类库像工厂一样,你要什么产品,传入一个参数,他就给你一个对应的对象,对像就可以完成很多工作。

1.        首先先定义一个工厂类

2.        把上面判断中的过程代码封装成一个个策略方法

3.        设置一个获取策略的方法,利用&执行宏替换,指定工厂类的策略

Define Class ExportExcelFactory as Collection  **zw策略  Procedure export_zw    MESSAGEBOX("导出zw.excel")  ENDPROC  **ls策略  Procedure export_ls    MESSAGEBOX("导出ls.excel")  ENDPROC  **ww策略  Procedure export_ww    MESSAGEBOX("导出ww.excel")  ENDPROC
  **获取策略  Procedure getStrategy(strategy)    TRY      func_name="export_"+strategy      this.&func_name()    CATCH    **兜底    MESSAGEBOX("无此格式")   ENDTRY  ENDPROCENDDEFINE

重构后的业务代码就变成了

export_type = thisform.combo1.Valueexcel_factory = CREATEOBJECT("ExportExcelFactory")excel_factory.getStrategy(export_type)

这里我是利用vfp的&宏替换来帮我进行参数的判断,虽然代码比之前的do case多,但是以后要增加判断的时候,我们可以不用更改业务代码,只需要在工厂类里增加对应的策略就可以了

在js里,也可以用到类似的方法来解决多if的判断

let ErrorFactory = new Map();let notLogin = {msg : "未登录", icon : "xxxxx"}let notAuth = {msg : "无此权限", icon : "yyyyy"}let notFound = {msg : "未找到此资源", icon : "zzzz"}ErrorFactory.set(10001,notLogin)ErrorFactory.set(10002,notAuth)ErrorFactory.set(10003,notFound)export default ErrorFactoryimport ErrorFactory from "./test";let code = 10001let {msg,icon} = ErrorFactory.get(code);uni.showToast({    title : msg,    image : icon})
这里我是利用了map键值对的简直来帮我进行参数的判断并实现不同状态下所执行的业务代码

最后,解决多层判断的本质,就是利用代码机制或者对象方法或者某种API来帮我们判断.

当然有老狐就会批判这种做法,说我们原来的模式多简单,一条代码写到底。

每种设计模式都是有应用场景的,了解了这些模式之后,要思考什么场景更适何,像猫框BS的入口,就是动态的,根据传入的文件名,对了一个对应的对象,就可以做非常的多的工作了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值