但问题是,三种子类的行为(里面的代码)都差不多一样,getPasswordMaxAgeInDays这个方法就一个数值不同(30,90或者Integer.MAX_VALUE)。canPrintReport这个方法也不同在一个数值(true或false)。这三种用户类型只需要用三个对象代替就行了,无须特别地新建三个子类了:
class UserAccount { |
注意到了吧!用一个对象代替类别,同样可以移除switch或者if-then-else-if。
总结一下类别代码的移除
要移动一些类别代码和switch表达式,有两种方法:
1、用基于同一父类的不同子类来代替不同的类别。
2、用一个类的不同对象来代替不同的类别。
当不同的类别具有比较多不同的行为时,用第一种方法。当这些类别的行为非常相似,或者只是差别在一些值上面的时候,用第二个方法。
普遍的代码异味
类别代码和switch表达式是比较普遍的代码异味。此外,还有其他的代码异味也很普遍。
下面是大概的异味列表:
◆代码重复
◆太多的注释
◆类别代码(type code)
◆switch或者一大串if-then-else-if
◆想给一个变量,方法或者类名取个好名字时,也怎么也取不好
◆用类似XXXUtil, XXXManager, XXXController 和其他的一些命名
◆在变量,方法或类名中使用这些单词“And”,“Or”等等
◆一些实例中的变量有时有用,有时没用
◆一个方法的代码太多,或者说方法太长
◆一个类的代码太多,或者说类太长
◆一个方法有太多参数
◆两个类都引用了彼此(依赖于彼此)
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Office技巧专区 (7169篇文章)
- Java环境安装配置 (5668篇文章)
- 网管实用技巧100例 (6880篇文章)
- ADO.NET实用技巧 (6407篇文章)
- Java编程开发手册 (8321篇文章)
- Wlan组网----家庭专题 (4217篇文章)
- Java基础开发篇 (583篇文章)
- Java与其他集成开发篇 (182篇文章)
- 精通Hibernate之映射继承关系(四) (0次浏览)
- 何不将Java与.NET合二为一? (0次浏览)
- Hibernate的JNDI名称绑定分析 (0次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



