面向对象语言的一个强大的特性是多态,它可以用来在代码中移除if/else语句或者switch-case语句块。没有条件的代码很容易阅读,但有些地方你不得不添加if/else代码块,比如工厂类。
相信你曾经看到过某个工厂类中的if/else变得越来越多。在这篇博文中,将共享几个可以在工厂类中移除if/else语句的方法:
会以下面的代码片段为例:
public static Validator newInstance(String validatorType) { if ("INT".equals(validatorType)) return new IntValidator(); else if ("DATE".equals(validatorType)) return new DateValidator(); else if ("LOOKUPVALUE".equals(validatorType)) return new LookupValueValidator(); else if ("STRINGPATTERN".equals(validatorType)) return new StringPatternValidator(); return null; }
第一种方法:使用反射(Reflection)
public static Validator newInstance(String validatorClass) { return Class.forName(validatorClass).newInstance(); }
这是第一个映入我脑海的方法,这看上去很简单,但是调用者必须知道完整的类名。
第二种方法:使用Map
Map<String, Validator> validators = new HashMap<String, Validator>() { { put("INT", new IntValidator()); put("LOOKUPVALUE", new LookupValueValidator()); put("DATE", new DateValidator()); put("STRINGPATTERN", new StringPatternValidator()); } }; public Validator newInstance(String validatorType) { return validators.get(validatorType); }
第三种方法:使用Enum
enum ValidatorType { INT { public Validator create() { return new IntValidator(); } }, LOOKUPVALUE { public Validator create() { return new LookupValueValidator(); } }, DATE { public Validator create() { return new DateValidator(); } }; public Validator create() { return null; } } public Validator newInstance(ValidatorType validatorType) { return validatorType.create(); }
该方法使用枚举类的方法移除条件逻辑。个人比较喜欢这种方法。
参考 http://www.javacodegeeks.com/2014/10/factory-without-if-else.html
相关推荐
3. 控制结构:包括条件语句(if/else)、循环语句(for、while、do/while)和跳转语句(break、continue)。 二、对象和类 1. 对象:ActionScript是面向对象的语言,允许通过new关键字创建对象,如`var myObject:...
对于if-else语句,它通常表现为一个带有两个子节点的结构:一个是条件表达式,另一个是包含两种可能执行路径的代码块。while循环则形成一个循环结构,包括一个条件节点和一个循环体节点。 进入语义分析阶段,编译器...
1. **IF...ELSE** - 基于条件执行不同代码路径。 2. **CASE** - 用于基于不同的条件执行不同的表达式。 3. **WHILE** - 当条件满足时重复执行代码块。 4. **CONTINUE** - 跳过当前循环的剩余部分并继续下一次循环。 ...
1. **If...Then...Else语句** ```asp If 条件 1 Then 语句 1 ElseIf 条件 2 Then 语句 2 Else 语句 3 End If %> ``` 此语句用于根据不同的条件执行不同的代码块。 2. **While...Wend语句** ...
"If..."部分可能与代码中的条件语句有关,这通常在编程中用于根据特定条件执行不同的代码路径。 描述中的"Uncomment the following if you want verbose error reports."是一条编程相关的注释。在编程中,...
DELETE语句用于从表中移除记录。基础形式如下: ``` DELETE FROM 表名 WHERE 条件; ``` 删除所有年龄大于20岁的学生: ``` DELETE FROM Students WHERE Age > 20; ``` 3. **修改数据(UPDATE)** UPDATE...
- `IF...ELSE`:条件判断,根据条件执行不同的代码路径。 - `WHILE`:循环结构,当条件满足时重复执行代码块。 - `CASE`:条件表达式,根据不同条件返回不同的结果。 - `WAITFOR`:延迟执行SQL语句,等待指定的...
2. **丢失或不匹配的if-else语句** `else`语句必须与最近的未配对的`if`语句匹配。在代码清单5.10中,`else (x)`应该改为`else if (x)`。这样的错误会导致逻辑流混乱,因为`else`分支无法正确地与相应的`if`分支...
- **IF...ELSE**:条件判断,根据条件执行不同的代码块。 - **CASE**:类似开关语句,根据不同条件执行相应分支。 - **WHILE...CONTINUE...BREAK**:循环控制,满足条件时持续执行,通过CONTINUE跳过当前迭代,...
字典(修改字典、删除字典元素、字典的特性)、集合(添加元素、移除元素、计算集合元素个数、清空集合、判断元素是否在集合中)、条件控制、判断语句、if语句、if嵌套、循环语句、while循环、无限循环、while循环...
#### 三、简化if-else语句 - 对于简单的条件判断,可以直接返回结果,避免不必要的变量声明。例如: ```java private boolean isEligible(int age) { return age > 18; } ``` #### 四、优化对象创建 - 避免...
- `IF condition THEN statement [ELSE statement]`:基于条件执行不同的语句。 - 示例: ```sql DECLARE @x INT, @y INT; SET @x = 1; SET @y = 2; IF @x > @y PRINT 'x>y'; ELSE PRINT 'y>=x'; ``` ###...
1. `if...else`:用于执行条件判断。 2. `switch...case`:多分支选择,更灵活的条件判断。 3. `ternary operator`(三元运算符):简化的条件表达式,如 `(条件) ? 表达式1 : 表达式2`。 四、循环语句 1. `for` ...
在Python编程语言中,`pass` 和 `del` 是两种非常基础且重要的语句,它们在不同的场景下发挥着各自的作用。接下来我们将深入探讨这两个语句的含义和使用方法。 首先,`pass` 是一个空语句,它不执行任何操作。在...
在VB(Visual Basic)编程中,动态增添和移除菜单是一项关键功能,它允许程序员根据程序运行时的需求来创建或删除菜单项。这样的操作对于创建用户界面(UI)的灵活性和适应性至关重要,特别是对于那些功能可以根据...
简单工厂模式中,创建实例的责任从客户类中移除,由工厂类来承担,这样做的好处是,如果需要添加新的产品类,只需要修改工厂类即可。 工厂方法模式则在简单工厂模式的基础上进一步抽象化,它定义了一个创建对象的...
在学习Python这门语言的过程中,首先了解基础知识点是非常重要的,如变量、列表、if语句、字典、while循环以及函数等。本文档基于学习笔记的形式,详细解释了这些Python基础语法,让我们一一解析。 一、变量 Python...