怎么消除春季代码中的if - else/切换实例

  介绍

这期内容当中小编将会给大家带来有关怎么消除春季代码中的if - else/切换实例,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

switch  (, type ), {   ,case  case1:   ,,…   ,,…   打破才能;   ,case 病例2:   ,,…   ,,…   打破才能;   ,case  case3:   ,,…   ,,…   ,打破   ,默认值:   return 才能;零;   }

这样的代码不仅冗长,读起来也非常困难。做的好一点的会把这些逻辑封装成函数然后在分支中调用:

switch  (, type ), {   ,case  case1:   return 才能case1Func ();   ,case 病例2:   return 才能case2Func ();   ,case  case3:   return 才能case3Func ();   ,默认值:   return 才能;零;   }

即使这样也是面向过程思维的写法,以前写C程序的时候也总喜欢这样写,毫无设计模式可言。不仅违背开闭原则,而且随着切换实例分支的增多,该段代码只会越来越冗长。其实这种代码已经有成熟的模式去消除诸多的if - else/切换实例分支。本文就教大家在春天中如何用注解+策略模式+简单工厂的方式消除if - else/切换实例。我们就拿QQ空间的个人中心举例子,假如QQ空间个人中心有四个选项卡分别是列出我的说,说我的日志,我的照片和我的访客。一般的后台代码很有可能如下:

//各个,tab 名称的枚举:   public  enum  UserRelatedType  {/* *   *,才能说说   ,*/,SHUOSHUO(“说说“),/* *   *,才能日志   ,*/,置(“日志“),/* *   *,才能发布   ,*/,ZHAOPIAN(“照片“),/* *   *,才能访客   ,*/,方可(“;”);      ,private  String  desc;      ,UserRelatedType (String  desc), {   时间=this.desc 才能;desc;   ,}      ,public  String  getDesc (), {   return 才能;desc;   ,}      ,public  void  setDesc (String  desc), {   时间=this.desc 才能;desc;   ,}   }

列出QQ用户个人中心相关标签的代码:

public  List, listRelated (UserRelatedQuery 查询){      ,UserRelatedType  relatedType =, UserRelatedType.valueOf (StringUtils.upperCase (query.getType ()),);   ,switch  (, relatedType ), {   case 才能;SHUOSHUO:   ,,return  listRelatedShuoshuo (, query );   case 才能;置:   ,,return  listRelatedRizhi (, query );   case 才能;ZHAOPIAN:   ,,return  listRelatedZhaopian (, query );   case 才能;方可:   ,,return  listRelatedFangke (, query );   默认值:才能   ,,return 零;   ,}   }

<>强而采用注解+策略模式+简单工厂,重构后代码如下:

1,定义一个注解,用来完全消除if - else:

@Target (ElementType.TYPE)   @Retention (RetentionPolicy.RUNTIME)   public  @interface  RelatedTypeAnnotation  {/* *   *,才能用户相关类型名称   ,*/,UserRelatedType 价值();   }

2,先定义了个接口,所有选项卡都要实现该接口。其列表中是标签数据展示的方法。

public  interface  UserRelated  {/* *   *,才能列出详细信息   ,*   *,才能@param 查询   *才能@return   ,*/,List列表(UserRelatedQuery 查询);   }

3,定义具体的各个选项卡的实现,继承UserRelated策略接口

我的说说

@ component (“userRelatedShuoshuo")   @RelatedTypeAnnotation (=,, value  UserRelatedType.SHUOSHUO )   public  class  UserRelatedShuoshuo  implements  UserRelated  {   ,@Override   ,public  List< UserRelatedVO>,列表(UserRelatedQuery 查询),{   System.out.println才能(“我的说说!“);   return 才能;列表;   ,}   }

我的日志

@ component (“userRelatedRizhi")   @RelatedTypeAnnotation (=,, value  UserRelatedType.RIZHI )   public  class  UserRelatedRizhi  implements  UserRelated  {   ,@Override   ,public  List< UserRelatedVO>,列表(UserRelatedQuery 查询),{   System.out.println才能(“我的日志!“);   return 才能;列表;   ,}   }

我的照片

怎么消除春季代码中的if - else/切换实例