工厂模式之消除switch/case语句


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


你可能感兴趣的:(Pattern,case,工厂模式,factory,消除swith)