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

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

 switch (status)
{
case :
return View("Create", applyBlog);
case :
return View();
case :
return View("PersonalBlogPage");
case :
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的不同值代表了不同的类名,直接用反射获取类。

重构--去除丑陋的switch语句的更多相关文章

  1. C#: switch语句的重构『网摘』

    http://bj007.blog.51cto.com/1701577/345100/ switch语句是我们日常工作中最常见也是争论最多的(goto被忽视的前提下).在重构中也把switch语句看成 ...

  2. 从各处收集的switch语句

    重构之重复代码: 1.(重复代码是)语义一致的逻辑 反例:语义一致的逻辑产生了多个实体 缺点:如果你为语义一致的逻辑产生了多个实体,那么当需要修改这个逻辑时,你必须保证同时修改所有的实体,并确保它们是 ...

  3. switch语句的妙用

    switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...

  4. 106运用SWITCH语句打印星期几的单词

    package com.chongrui.test;/*运用SWITCH语句打印星期几的单词 * */ public class TypeConvertion { public static void ...

  5. 通过goto语句学习if...else、switch语句并简单优化

    goto语句在C语言中实现的就是无条件跳转,第二章一上来就介绍goto语句就是要通过goto语句来更加清楚直观的了解控制结构. 我理解的goto语句其实跟switch语句有相似之处,都是进行跳转.不同 ...

  6. Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)

    ---------------------if语句介绍--------------------------------------------------- class IfDemo { public ...

  7. Switch语句的case穿透

    Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...

  8. ECMA中的switch语句

    switch借鉴自其他语言,但也有自己的特色. 1.可以在switch语句中使用任何数据类型(数值.字符串.对象等),很多其他语言中只能使用数值. 2.每个case的值不一定是常量,可以是变量或者表达 ...

  9. switch语句下的变量声明和定义

    switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...

随机推荐

  1. POJ1741 Tree + BZOJ1468 Tree 【点分治】

    POJ1741 Tree + BZOJ1468 Tree Description Give a tree with n vertices,each edge has a length(positive ...

  2. POJ3045 Cow Acrobats

    题意 Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join t ...

  3. Tencent Server Web(TSW) 腾讯开源的nodejs 基础设施

      Tencent Server Web(TSW),是一套面向WEB前端开发者,以提升问题定位效率为初衷,提供染色抓包.全息日志和异常发现的Node.js基础设施.TSW关注业务的运维监控能力,适用于 ...

  4. .NET平台上的Model-View-Presenter模式实践

    为什么要写这篇文章 笔者当前正在负责研究所中一个项目,这个项目基于.NET平台,初步拟采用C/S部署体系,所以选择了Windows Forms作为其UI.经过几此迭代,我们发现了一个问题:虽然业务逻辑 ...

  5. F4NNIU 版本的标准电阻列表(2018-09-29 更新)

    F4NNIU 版本的标准电阻列表(2018-09-29 更新) 值代码 电阻值 格式化值 单位 公差代码 公差 格式化值数字 描述 0RJ 0 0 R J 5% J0000 0R 5% (0RJ) 1 ...

  6. 【备忘】mysql主从设置

    主(master)192.168.1.10机器设置: [root@vm-vagrant mysql]# vi my.cnf [mysqld]节点下添加以下配置server-id=1log-bin=my ...

  7. 登录MySQL非默认3306端口号的语句

    这里登陆的是mysql3308端口号的数据库 mysql -P3308 -p用户名 -u密码

  8. bzoj1729: [Usaco2005 dec]Cow Patterns 牛的模式匹配

    Description     约翰的N(1≤N≤100000)只奶牛中出现了K(1≤K≤25000)只爱惹麻烦的坏蛋.奶牛们按一定的顺序排队的时候,这些坏蛋总会站在一起.为了找出这些坏蛋,约翰让他的 ...

  9. postman断言的方法

    1.在test添加断言 2.检查response的body中是否包含字符串: tests["Body matches string"] = responseBody.has(&qu ...

  10. java代码----------实现写出循环

    总结:对于循环次数累加.等等总是不知道在哪一行插入 package com.mmm; //输出10个数字中,小于5的数字 public class hai { public static void m ...