如果switch语句中的分支固定,且不可变(例如,星期中只有7天)不用使用工厂方法替换;如果分支不固定,或将来有可能改,可以采用工厂方法来替换switch语句,这样就符合开发闭合原则。
下面直接进入正题
PlanDataType 接口:
package com.test.factory;
public interface PlanDataType {
public boolean isDataTypeValid(String dataType);
}
StringType 实现类
package com.test.factory;
import org.apache.commons.lang3.StringUtils;
public class StringType implements PlanDataType {
@Override
public boolean isDataTypeValid(String dataType) {
if (StringUtils.isNotBlank(dataType)) {
return true;
}
return false;
}
}
IntegerType 实现类:
package com.test.factory;
import org.apache.commons.lang3.StringUtils;
public class IntegerType implements PlanDataType {
@Override
public boolean isDataTypeValid(String dataType) {
if (StringUtils.isNumeric(dataType)) {
return true;
}
return false;
}
}
Factory工厂类:
package com.test.factory;
public class Factory {
public static PlanDataType getInstance(String className){
PlanDataType planDataType = null ;
try{
planDataType = (PlanDataType)Class.forName(className).newInstance() ;
}catch(Exception e){
e.printStackTrace() ;
}
return planDataType ;
}
Test类:
package com.test.factory;
public class PlanDataTypeValidationTest {
public static void main(String[] args) {
PlanDataType dataType = Factory.getInstance("com.test.factory.StringType") ;
if(dataType.isDataTypeValid("aaa")){
System.out.println("OK");
}else
{
System.out.println("not ok");
}
}
}
输出结果:
ok