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