重构--去除丑陋的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都是平等的层次,区别于一般 ...
随机推荐
- python模块--config
一.创建文件 ##-----------------创建数据表-------------------------- import configparser config = configparser. ...
- python模块--time模块
1.时间戳 import time #------->> 时间戳 print(time.time()) 1525418832.2835853 2.结构化时间 #------->> ...
- nginx 获取请求头,URL参数
获取url参数 在 ngx_lua 中访问 Nginx 内置变量 ngx.var.arg_PARAMETER 即可获得GET参数PARAMETER的内容. 在 nginx配置中,通过$arg_PARA ...
- Jitsi 开源视频会议远程桌面共享&&文档共享工具
1. 特点 主要功能特点: 支持网络视频会议,使用SFU模式实现视频路由器功能. 支持SIP帐号注册电话呼叫. 支持安卓苹果终端. 支持文档共享功能,即时消息功能. 支持中文界面. 支持会议邀请,密码 ...
- Mybatis新增返回主键的两种方法 (mysql)
1.自增:LAST_INSERT_ID (自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值.) <!-- mysql的自增ID :LAS ...
- Microsoft Visual Studio小技巧
main函数调试参数: Project -> Properties -> Configuration Properties -> Debugging 在Command Argumen ...
- python 读取Linux服务器上的文件
使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...
- (转)winform安装项目、安装包的制作、部署
本文转载自:http://zhan.renren.com/cxymst?gid=3602888498037535727&from=post&checked=true 1,解决方案—添加 ...
- [转]MySQL 经验集
-- my.ini -> 在 [mysqld] 节点下加入一行 skip-grant-tables 然后重启服务 -- 接下来无密码登录到 mysql 执行以下命令 use mysql show ...
- 阿里云中域名的MX记录添加方法
如何添加阿里云的MX记录 1. 登录阿里云,点击“云解析”,点击自己想要添加MX记录的域名: 2. 点击新手引导设置: 3. 点击解析设置,自动跳出“设置网站”和“设置邮箱”: 4. 跳出的页面,选择 ...