前言
本文是我看了 谷歌简洁代码演讲系列 中的 多态和条件语句 的总结。大部分的条件语句是可以用多态代替的,本文将围绕以下问题开展:
- 为什么要用多态替代条件语句
- 多态和条件语句的使用场景
- 如何用多态代替条件语句
- 在哪里决定要创建什么子类
- 什么情况下使用多态
为什么要用多态替代条件语句
- 没有 if 语句的函数更容易阅读。
- 没有 if 语句的函数更容易测试。
- 多态的系统更容易维护。
多态和条件语句的使用场景
使用多态的场景
- 当对象要根据不同的状态表现不同的行为时。
- 当你需要在很多地方检查相同的条件时。
使用条件语句的场景
- 主要用于原始对象的比较:<,>,==,!=。
- 其他
这篇文章主要着重于如何避免 if 语句。
如何避免使用 if 语句
- 不要返回 null,而是返回一个空的对象,例如说空的链表。
- 不要返回错误码,而是直接在运行时抛出异常。
如何用多态代替条件语句
如果你有一个条件语句,它根据对象的类型选择不同的行为。那么如何用多态来替代它呢?下面,我们来看一个例子。
条件语句实现的类
Class Update {
execute() {
if (FLAG_i18n_ENABLE) {
//DO A;
} else {
//DO B;
}
}
render() {
if (FLAG_i18n_ENABLE) {
//render A;
} else {
//render B;
}
}
}
上面的类根据 FLAG_i18n_ENABLE
来执行不同的操作。可能你以前就是这么写代码的,觉得这样写一点问题都没有。那么,我现在问你,怎么测试上面的类?
下面我们来看看一般的测试方法。
void testExecuteDoA() {