`
MouseLearnJava
  • 浏览: 467228 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

工厂类中移除if/else语句

    博客分类:
  • Java
 
阅读更多

面向对象语言的一个强大的特性是多态,它可以用来在代码中移除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

分享到:
评论

相关推荐

    ActionScript语句中文全解

    3. 控制结构:包括条件语句(if/else)、循环语句(for、while、do/while)和跳转语句(break、continue)。 二、对象和类 1. 对象:ActionScript是面向对象的语言,允许通过new关键字创建对象,如`var myObject:...

    编译原理 for 条件语句,while 语句的翻译

    对于if-else语句,它通常表现为一个带有两个子节点的结构:一个是条件表达式,另一个是包含两种可能执行路径的代码块。while循环则形成一个循环结构,包括一个条件节点和一个循环体节点。 进入语义分析阶段,编译器...

    SQL语句英文翻译成中文

    1. **IF...ELSE** - 基于条件执行不同代码路径。 2. **CASE** - 用于基于不同的条件执行不同的表达式。 3. **WHILE** - 当条件满足时重复执行代码块。 4. **CONTINUE** - 跳过当前循环的剩余部分并继续下一次循环。 ...

    hd.rar_If...

    "If..."部分可能与代码中的条件语句有关,这通常在编程中用于根据特定条件执行不同的代码路径。 描述中的"Uncomment the following if you want verbose error reports."是一条编程相关的注释。在编程中,...

    sql常用语句总结,增删改查等sql语句

    DELETE语句用于从表中移除记录。基础形式如下: ``` DELETE FROM 表名 WHERE 条件; ``` 删除所有年龄大于20岁的学生: ``` DELETE FROM Students WHERE Age &gt; 20; ``` 3. **修改数据(UPDATE)** UPDATE...

    SQL语句大全,包括所有常用的SQL语句

    - `IF...ELSE`:条件判断,根据条件执行不同的代码路径。 - `WHILE`:循环结构,当条件满足时重复执行代码块。 - `CASE`:条件表达式,根据不同条件返回不同的结果。 - `WAITFOR`:延迟执行SQL语句,等待指定的...

    C语言编程技术实践2020版 常见编译错误与调试文档5.doc

    2. **丢失或不匹配的if-else语句** `else`语句必须与最近的未配对的`if`语句匹配。在代码清单5.10中,`else (x)`应该改为`else if (x)`。这样的错误会导致逻辑流混乱,因为`else`分支无法正确地与相应的`if`分支...

    SQL语句大全(很全)

    - **IF...ELSE**:条件判断,根据条件执行不同的代码块。 - **CASE**:类似开关语句,根据不同条件执行相应分支。 - **WHILE...CONTINUE...BREAK**:循环控制,满足条件时持续执行,通过CONTINUE跳过当前迭代,...

    python超详细基础知识(含代码举例)

    字典(修改字典、删除字典元素、字典的特性)、集合(添加元素、移除元素、计算集合元素个数、清空集合、判断元素是否在集合中)、条件控制、判断语句、if语句、if嵌套、循环语句、while循环、无限循环、while循环...

    常见的Java不规范代码

    #### 三、简化if-else语句 - 对于简单的条件判断,可以直接返回结果,避免不必要的变量声明。例如: ```java private boolean isEligible(int age) { return age &gt; 18; } ``` #### 四、优化对象创建 - 避免...

    常用 SQL 语句大全

    - `IF condition THEN statement [ELSE statement]`:基于条件执行不同的语句。 - 示例: ```sql DECLARE @x INT, @y INT; SET @x = 1; SET @y = 2; IF @x &gt; @y PRINT 'x&gt;y'; ELSE PRINT 'y&gt;=x'; ``` ###...

    javascript常用语句总结

    1. `if...else`:用于执行条件判断。 2. `switch...case`:多分支选择,更灵活的条件判断。 3. `ternary operator`(三元运算符):简化的条件表达式,如 `(条件) ? 表达式1 : 表达式2`。 四、循环语句 1. `for` ...

    学学Python_30语句_其他语句01(pass,del)

    在Python编程语言中,`pass` 和 `del` 是两种非常基础且重要的语句,它们在不同的场景下发挥着各自的作用。接下来我们将深入探讨这两个语句的含义和使用方法。 首先,`pass` 是一个空语句,它不执行任何操作。在...

    经典的MySQL语句

    - **IF-THEN-ELSE**: 存储过程中可以使用 `IF` 语句来根据不同的条件执行不同的代码块。例如,在 `p12` 存储过程中,根据 `var` 的值插入或更新数据。 - **CASE 语句**: `CASE` 语句提供了多条件分支的处理能力,...

    14动态增添和移除菜单

    在VB(Visual Basic)编程中,动态增添和移除菜单是一项关键功能,它允许程序员根据程序运行时的需求来创建或删除菜单项。这样的操作对于创建用户界面(UI)的灵活性和适应性至关重要,特别是对于那些功能可以根据...

    Java常用设计模式.pdf

    简单工厂模式中,创建实例的责任从客户类中移除,由工厂类来承担,这样做的好处是,如果需要添加新的产品类,只需要修改工厂类即可。 工厂方法模式则在简单工厂模式的基础上进一步抽象化,它定义了一个创建对象的...

    python笔记-变量、列表、if、字典、while、函数.pdf

    在学习Python这门语言的过程中,首先了解基础知识点是非常重要的,如变量、列表、if语句、字典、while循环以及函数等。本文档基于学习笔记的形式,详细解释了这些Python基础语法,让我们一一解析。 一、变量 Python...

Global site tag (gtag.js) - Google Analytics