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();
}
posted @ 2018-09-13 14:28  i迷倪  阅读(3584)  评论(0编辑  收藏  举报