具有不同初始化对象类型的Java工厂模式

时间:2014-11-06 11:11:31

标签: java generics factory-pattern

我使用工厂模式创建实例,并希望使用不同的对象初始化这些实例。目前我只是简单地投射物体,但这感觉不对。

public interface IGenerator {
    public IGeneratedObject generate();
}

public class FirstGenerator implements IGenerator {

    private List<FirstObject> list;

    public FirstGenerator(List<FirstObject> list) {
        this.list = list;
    }

    public IGeneratedObject generate() {
        return doSomeStuff(list);
    }
}

public class SecondGenerator implements IGenerator {

    private UnrelatedObject obj;

    public SecondGenerator(UnrelatedObject obj) {
        this.obj = obj;
    }

    public IGeneratedObject generate() {
        return doOtherThingsStuff(obj);
    }
}

public class GeneratorFactory {

    public static IGenerator createGenerator(GeneratorType type, Object object) {

        switch (type) {

        case FIRST:
            return new FirstGenerator((List<FirstObject>) object);
        case SECOND:
            return new SecondGenerator((UnrelatedObject) object);
        }

        return null;
    }
}

用法如下:

IGenerator gen1 = GeneratorFactory.createGenerator(GeneratorType.FIRST, listOfFirstObjects);

IGenerator gen2 = GeneratorFactory.createGenerator(GeneratorType.SECOND, unrelatedObj);

FirstObjectUnrelatedObject目前尚未相关 - 没有共同的基类或接口。

在工厂方法中,编译器当然会显示来自...&#39;的未选中的强制转换。警告。

有更好的方法吗?这似乎是一种可以使用泛型的情况,但由于这些对象没有相关性,这是不可行的吗?

2 个答案:

答案 0 :(得分:2)

您是否可以创建工厂类,以便使用如下所示?

IGenerator gen1 = GeneratorFactory.createGeneratorFirst(listOfFirstObjects);

IGenerator gen2 = GeneratorFactory.createGeneratorSecond(unrelatedObj);

答案 1 :(得分:0)

没有理由拥有方法&#34;创建生成器&#34;。

创建生成器由构造函数和类类型本身封装。

使用IGenerator gen1 = new FirstGenerator((List<FirstObject>) object);完全没问题。