zoukankan      html  css  js  c++  java
  • 重构--去除丑陋的switch语句

    最近几天,在进行重构的时候,遇到了一个极其丑陋的代码(自己写的 /捂脸  当时时间紧,于是。。。。),今天去重构的时候无论如何也想不出方法,去除这个丑陋的switch语句

    ,于是写篇博客,让自己记住这个问题 。

     switch (status)
                {
                    case 0:
                        return View("Create", applyBlog);
                    case 1:
                        return View();
                    case 2:
                        return View("PersonalBlogPage");
                    case 3:
                        return View("Create", applyBlog);
                    default:
                        return View();
                }

    这就是那个丑陋的switch语句。网上好多帖子去除switch语句的时候,用的是反射+多态,可是这两个我都用的挺熟的呀。估计是没理解吧。先把问题放在这里。

    今天在博客园提问了一下,得到了一个极其精明的的答案

    class  Response{ 
    
      public void View(){    
    
      }
    
    }
    
    View0 extends Response{
    
      string str0 = "Create";
    
      string applyBlog;
    
      public void View(){
    
           str0 = "done";
    
         applyBlog = "done too";
    
      }
    
    View1 extends Response{ 
    
      public void View(){    
    
        //do something...
    
      }
    
    }
    
    View2 extends Response{
    
      string str2 = "PersonalBlogPage";
    
      
    
    public void View(){
    
           ComFun.Dosomething(str2);
    
        //do something...
    
      } 
    
    }
    
     
    
    /* 反射,通过类的名字 */
    
    Class c = Class.forName("View"+status);
    
    /* 实例化对象 */
    
    Response r = (Response) c.newInstance();
    
    /* 多态完成具体的View()调用 */
    
    r.View();

    这是答主用Java写的用反射+多态实现去除switch语句的方法,感觉他的这个思路好奇特呀,他奇特之处在于用status的不同值代表了不同的类名,直接用反射获取类。

  • 相关阅读:
    Vista修改网卡MAC地址防御ARP
    MySQL
    FirstWebSite
    Java
    python
    编码风格 标识符命名
    计算机体系结构基础
    编码风格 indent工具
    Linux发布web app 到Tomcat
    编码风格 函数
  • 原文地址:https://www.cnblogs.com/qulianqing/p/6737150.html
Copyright © 2011-2022 走看看