我使用工厂模式创建实例,并希望使用不同的对象初始化这些实例。目前我只是简单地投射物体,但这感觉不对。
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);
FirstObject
和UnrelatedObject
目前尚未相关 - 没有共同的基类或接口。
在工厂方法中,编译器当然会显示来自...&#39;的未选中的强制转换。警告。
有更好的方法吗?这似乎是一种可以使用泛型的情况,但由于这些对象没有相关性,这是不可行的吗?
答案 0 :(得分:2)
您是否可以创建工厂类,以便使用如下所示?
IGenerator gen1 = GeneratorFactory.createGeneratorFirst(listOfFirstObjects);
IGenerator gen2 = GeneratorFactory.createGeneratorSecond(unrelatedObj);
答案 1 :(得分:0)
没有理由拥有方法&#34;创建生成器&#34;。
创建生成器由构造函数和类类型本身封装。
使用IGenerator gen1 = new FirstGenerator((List<FirstObject>) object);
完全没问题。