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的不同值代表了不同的类名,直接用反射获取类。

  • 相关阅读:
    iOS 成员变量,实例变量,属性变量的区别,联系
    iOS类别(category)不能添加成员变量但是可以添加属性的问题
    iOS缓存机制详解
    ios数据缓存方法
    仿360圆圈自动隐藏效果
    html 背景透明文字不透明
    netty
    关注网站
    关注URL
    DNS之XX记录
  • 原文地址:https://www.cnblogs.com/qulianqing/p/6737150.html
Copyright © 2011-2022 走看看