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