Java工厂模式——动态加载类

标签 java oop factory factory-pattern

我有很多类(class)UNO、HAV、MAS、KOS 我想创建一个工厂模式。

 validator.load("UNO").validate();

我需要动态地将类加载到 validator 类中并返回一个实例。
(动态设置类名并返回实例)
我的问题是:如果我有不兼容的类型,如何返回类的实例?

我不知道在方法的返回类型中要写什么。

validator 类中的主要问题。

public SegmentAbstract load(String str) {

并且

return SegmentAbsClass.forName(identify);

主类

try{
   validator.load("UNO").validate();
}catch(Exception e){
   System.out.print("No class ");
}

抽象类(SegmentAbstract)

public abstract class SegmentAbstract {

  public abstract Boolean validate();
}

UNO 类

public class UNA extends SegmentAbstract{

  public Boolean validate() {
    System.out.print("UNO!!");
    return true;
  }

}

类 validator

public class Validator {

  public SegmentAbstract load(String str) {
    String identify = str.substring(0, 3);
    try {

      return SegmentAbsClass.forName(identify);
    }
    catch(Exception e) {
      return this;
    }

  }
}

最佳答案

试试这个:

public interface Validator {
    boolean validate(Object obj);
}

public final class ValidatorFactory {
    private ValidatorFactory(){}

    public static Validator load(String type){
        try {
            Class<?> clazz = Class.forName(type);
            if (Arrays.asList(clazz.getInterfaces()).contains(Validator.class)){
                return (Validator) clazz.newInstance();
            }
            throw new IllegalArgumentException("Provided class doesn't implement Validator interface");
        } catch (Exception e) {
            throw new IllegalArgumentException("Wrong class provided", e);
        } 
    }
}

也许这会有所帮助???

关于Java工厂模式——动态加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456618/

相关文章:

php - PDO FetchObject 转化为对象属性; PHP 中的面向对象编程

java - java中具有无穷大的Math.round

java - 分割字符串时是否有替代 String[] 的方法?

java - 在一个事务中执行两个不同的查询

ruby - 从同一类中的另一个方法访问变量

c# - 如何正确使用依赖注入(inject)?

java - 使java程序返回值以调用shell脚本

unit-testing - 具有具体类作为返回类型的单元测试工厂方法

.net - MEF 实例化和多线程

带有装饰器的动态方法创建者的python setattr