zoukankan      html  css  js  c++  java
  • Java代码消除switch/case,if/else语句的几种实现方式

    转自:https://my.oschina.net/stefanzhlg/blog/372413

    我们在平时的编码中,我们经常会遇到这样的情况:
    使用过多的switch/case 或者 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;
            }

    或相应的switch case代码。


    下面我提供几种方式消除这些讨厌的switch/case,if/else语句:

    1、反射

    利用反射创建对象:

    public static Validator newInstance(String validatorClass) {
                    return Class.forName(validatorClass).newInstance();             
            }

    缺点:需要根据类的全名进行返回对象。

    2、Map

    提前将对象根据相应的key-object放入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);
            }

    3、Enum

    根据不同的枚举类型值调用newInstance创建出不同的对象。

    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();
    }
  • 相关阅读:
    getElementsByTagName 与 $(élement)的区别
    php面向对象学习笔记
    使用php添加定时任务
    JS中数组Array的用法
    大陆居民身份证真伪校验
    安卓 日常问题 工作日志15
    安卓 日常问题 工作日志14
    安卓 日常问题 工作日志13
    安卓 日常问题 工作日志12
    安卓 日常问题 工作日志11
  • 原文地址:https://www.cnblogs.com/njl041x/p/9640309.html
Copyright © 2011-2022 走看看