必会重构技巧:使用多态替换条件
2010-07-13 18:03
127 查看
使用多态替换条件:指在进行类型检查和执行某些类型操作时,最好将算法封装在类中,并且使用多态来对代码中的调用进行抽象
举例理解:看定义可能比较迷糊,其实说的简单一点,对于使用分支语句并且分支条件是和类型检查相关的程序段,如 if(type == typeof(TypeA)){...}else if(type == typeof(TypeB)){...},可以把{...}中的Code,尝试放到if的条件中去。然后通过检查Type就可以直接返回需要的东东了,这样做可以利用已有的继承层次进行计算,比较便于维护。如果还是觉得说的太抽象,可以看看下面的代码感觉一下。
项目实例:用WPF做一个网游的客户端Demo,里面需要对商品,邮件,物品栏做分页操作。于是手动写了几个分页的类。开始是把分页的计算方法都写在了事件里面的,每一个Button绑定一个事件,每次需要修改或者使用分页的时候,都要找到相关类进行修改,复制,各个方法的耦合程度大增,程序可读性,复用性和可维护性都不太好。虽然这个项目是很久之前做的了,但这里既然想起来了,觉得还是可以尝试用这种重构方法,效果如何大家自己看看吧。
先来看看原始的未经过重构的代码:
前台调用代码
个人感觉,对于本例中的应用,好处并不是很明显,也许是我写的有问题,也许是我选择例子有问题。尽管如此,重构的思想体现出来了,那就是把算法封装到多态中。此种重构在对于含类型判断条件的复杂算法分支的应用上,效果还是比较显著的。
举例理解:看定义可能比较迷糊,其实说的简单一点,对于使用分支语句并且分支条件是和类型检查相关的程序段,如 if(type == typeof(TypeA)){...}else if(type == typeof(TypeB)){...},可以把{...}中的Code,尝试放到if的条件中去。然后通过检查Type就可以直接返回需要的东东了,这样做可以利用已有的继承层次进行计算,比较便于维护。如果还是觉得说的太抽象,可以看看下面的代码感觉一下。
项目实例:用WPF做一个网游的客户端Demo,里面需要对商品,邮件,物品栏做分页操作。于是手动写了几个分页的类。开始是把分页的计算方法都写在了事件里面的,每一个Button绑定一个事件,每次需要修改或者使用分页的时候,都要找到相关类进行修改,复制,各个方法的耦合程度大增,程序可读性,复用性和可维护性都不太好。虽然这个项目是很久之前做的了,但这里既然想起来了,觉得还是可以尝试用这种重构方法,效果如何大家自己看看吧。
先来看看原始的未经过重构的代码:
前台调用代码
protected void btnPaging_Click(object sender, EventArgs e) { Button btn = sender as Button; if (btn == null) return; Paging page; switch (btn.CommandArgument) { case "FirstPage": page = new FirstPage(x,y); repDataList.DataSource = page.DataList; break; case "PrePage": page = new PrePage(x, y); repDataList.DataSource = page.DataList; break; case "NextPage": page = new NextPage(x, y); repDataList.DataSource = page.DataList; break; case "LastPage": page = new LastPage(x, y); repDataList.DataSource = page.DataList; break; } }
个人感觉,对于本例中的应用,好处并不是很明显,也许是我写的有问题,也许是我选择例子有问题。尽管如此,重构的思想体现出来了,那就是把算法封装到多态中。此种重构在对于含类型判断条件的复杂算法分支的应用上,效果还是比较显著的。
相关文章推荐
- 必会重构技巧(二):使用多态替换条件
- 必会重构技巧(二):使用多态替换条件
- 31天重构学习笔记31. 使用多态代替条件判断
- 31天重构指南之三十一:使用多态代码条件判断
- 31天重构学习笔记31. 使用多态代替条件判断
- 31天重构学习笔记31. 使用多态代替条件判断
- 31天重构学习笔记31. 使用多态代替条件判断
- 重构第31天 使用多态替代条件语句( Replace conditional with Polymorphism)
- 重构指南 - 使用多态代替条件判断(Replace conditional with Polymorphism)
- 31 天重构学习笔记31. 使用多态代替条件判断
- 31天重构学习笔记31. 使用多态代替条件判断
- 重构第四天 : 用多态替换条件语句(if else & switch)
- 31天重构学习笔记18. 使用条件判断代替异常
- 31天重构学习笔记18. 使用条件判断代替异常
- 31 天重构学习笔记18. 使用条件判断代替异常
- office-word使用技巧——查找&替换
- 31天重构指南之十八:使用条件判断代替异常
- NET正则表达式使用高级技巧之替换类
- 黑马程序员--OC之类的封装继承多态使用技巧
- 重构-简化条件语句的使用