重构--去除丑陋的switch语句
最近几天,在进行重构的时候,遇到了一个极其丑陋的代码(自己写的 /捂脸 当时时间紧,于是。。。。),今天去重构的时候无论如何也想不出方法,去除这个丑陋的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语句的更多相关文章
- C#: switch语句的重构『网摘』
http://bj007.blog.51cto.com/1701577/345100/ switch语句是我们日常工作中最常见也是争论最多的(goto被忽视的前提下).在重构中也把switch语句看成 ...
- 从各处收集的switch语句
重构之重复代码: 1.(重复代码是)语义一致的逻辑 反例:语义一致的逻辑产生了多个实体 缺点:如果你为语义一致的逻辑产生了多个实体,那么当需要修改这个逻辑时,你必须保证同时修改所有的实体,并确保它们是 ...
- switch语句的妙用
switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...
- 106运用SWITCH语句打印星期几的单词
package com.chongrui.test;/*运用SWITCH语句打印星期几的单词 * */ public class TypeConvertion { public static void ...
- 通过goto语句学习if...else、switch语句并简单优化
goto语句在C语言中实现的就是无条件跳转,第二章一上来就介绍goto语句就是要通过goto语句来更加清楚直观的了解控制结构. 我理解的goto语句其实跟switch语句有相似之处,都是进行跳转.不同 ...
- Java中简单的操作(if语句、常用操作符、switch语句、变量赋值等)
---------------------if语句介绍--------------------------------------------------- class IfDemo { public ...
- Switch语句的case穿透
Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...
- ECMA中的switch语句
switch借鉴自其他语言,但也有自己的特色. 1.可以在switch语句中使用任何数据类型(数值.字符串.对象等),很多其他语言中只能使用数值. 2.每个case的值不一定是常量,可以是变量或者表达 ...
- switch语句下的变量声明和定义
switch语句下的变量声明和定义的问题: switch...case...语句中存在声明和定义会出现一些问题.这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般 ...
随机推荐
- css 样式常用属性
一般的一个DIV的CSS设置属性有:margin,padding,width,height,font-size,text-align,background,float,border 附:< cs ...
- Python 三元条件判断表达式(and or/if else)
参考: http://wangye.org/blog/archives/690/
- JavaScript中的函数(一)
javaScript中的函数实际上是对象,每一个函数都是Function类型的实例,和其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也就是一个指向函数对象的指针,也就是函数对象的一个 ...
- Dev-C++ 小问题锦集
C++ project cann't debug Your project does not have debugging information, do you want to enable deb ...
- ibernate+Struts2环境如何使用jqGrid。
因为公司项目需要,在Hibernate+Struts2的环境下,研究了一下如何使用jqGrid. 说实在的,Struts2+jqGrid不是一个很好的组合.因为jqGrid中很多功能,基本上都使用的是 ...
- eclipse git 开发操作流程
1.eclipse git 开发操作流程 1.1流程简介 1)master主分支,当开发版本得到了充分的验证之后,才能将分支合入master,master为可产品化发布的状态. 2)develop分支 ...
- cocos2dx 3.0 编译工程
下载完2dx,运行setup.py,参考设置ANDROID_SDK,NDK_ROOT,ANT_ROOT变量 创建工程 cocos new testGame -p com.game.test -l cp ...
- 黄聪:VS2010中“新建项目”却没有“解决方案”节点,如何调出来
工具->选项->项目和解决方案 把"总是显示解决方案"打 √ 就ok 了
- 用命令行cmd 编译小程序
操作命令: C:\Users\Administrator>"C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" /out:D: ...
- Java 代码块
一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. 3.静态代码块: 用static{}包裹起来的代码片段,只会执 ...