时间:2021-05-20
前言
在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现。做的不好的会直接把实现的代码放在 if-else/switch-case 的分支之下:
这样的代码不仅冗长,读起来也非常困难。做的好一点的会把这些逻辑封装成函数然后在分支中调用:
即使这样也是面向过程思维的写法,以前写 C 程序的时候也总喜欢这样写,毫无设计模式可言。不仅违背开闭原则,而且随着 switch-case 分支的增多,该段代码只会越来越冗长。其实这种代码已经有成熟的模式去消除诸多的 if-else/switch-case 分支。本文就教大家在 Spring 中如何用注解+策略模式+简单工厂的方式消除 if-else/switch-case 。我们就拿 QQ 空间的个人中心举例子,假如 QQ 空间个人中心有四个 tab 分别是列出我的说说、我的日志、我的照片和我的访客。一般的后台代码很有可能如下:
列出 QQ 用户个人中心相关 tab 的代码:
而采用注解+策略模式+简单工厂,重构后代码如下:
1、定义一个注解,用来完全消除 if-else:
2、先定义了个接口,所有 tab 都要实现该接口。其中 list 是 tab 数据展示的方法。
3、定义具体的各个 tab 的实现,继承 UserRelated 策略接口
我的说说
@Component("userRelatedShuoshuo")@RelatedTypeAnnotation( value = UserRelatedType.SHUOSHUO )public class UserRelatedShuoshuo implements UserRelated { @Override public List<UserRelatedVO> list(UserRelatedQuery query) { System.out.println("我的说说!"); return list; }}我的日志
@Component("userRelatedRizhi")@RelatedTypeAnnotation( value = UserRelatedType.RIZHI )public class UserRelatedRizhi implements UserRelated { @Override public List<UserRelatedVO> list(UserRelatedQuery query) { System.out.println("我的日志!"); return list; }}我的照片
@Component("userRelatedZhaopian")@RelatedTypeAnnotation( value = UserRelatedType.ZHAOPIAN )public class UserRelatedZhaopian implements UserRelated { @Override public List<UserRelatedVO> list(UserRelatedQuery query) { System.out.println("我的照片!"); return list; }}我的访客
@Component("userRelatedFangke")@RelatedTypeAnnotation( value = UserRelatedType.FANGKE )public class UserRelatedFangke implements UserRelated { @Override public List<UserRelatedVO> list(UserRelatedQuery query) { System.out.println("我的访客!"); return list; }}3、定义一个从 Spring context 获取 bean 的工具类
4、定义一个简单工厂,用来生产各种 tab 对象。
5、调用的代码(listRelated 会在 controller 中被调用)。
重构后的代码如果需要再新增一种 tab,比如我的好友,只需要新增一种类型继承 UserRelated 实现其中的 list,并加上相应的注解即可。
其实这是一种通用的解决方案,当你 if-else/switch-case 的分支超过 3 个、且分支代码相似且冗长的情况下就应该考虑这种模式。这种模式写出的代码面向对象、清晰、易扩展还高大上,何乐而不为呀,赶紧试试吧!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
习惯了C#的语法,遇到多分支调用的情况,除了最简单的if-else,那么就是switch-case了,所以使用JavaScript的时候就很容易会写出下面这样的
java中的switchcase语句switch-case语句格式如下:switch(变量){case变量值1://;break;case变量值2://...;
学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现。所以不妨自己来实现Switc
这里介绍通过委托取消Button事件switch-case的方法。需要注意的是,事先要按顺序在各个Button的Tag属性中设置0、1、2、3……等序号,其作用
复制代码代码如下:functionempty(v){switch(typeofv){case'undefined':returntrue;case'string