Java 当工厂需要创建具有多个公共参数的对象时,如何解决这个难题?
我有一组Java 当工厂需要创建具有多个公共参数的对象时,如何解决这个难题?,java,factory-pattern,builder-pattern,Java,Factory Pattern,Builder Pattern,我有一组PageRenderer抽象类的子类,例如 ImagePageRenderer TextPageRenderer VideoPageRenderer 因此,为了获得PageRenderer实例,工厂方法是合适的。concreate工厂如下所示: public class PageRendererFactory extends AbstractFactory { PageRenderer createPageRenderer(Type type) { //implement
PageRenderer
抽象类的子类,例如
ImagePageRenderer
TextPageRenderer
李>VideoPageRenderer
PageRenderer
实例,工厂方法是合适的。concreate
工厂如下所示:
public class PageRendererFactory extends AbstractFactory {
PageRenderer createPageRenderer(Type type) {
//implementation
}
}//Code AbstractFactory is skipped here
但是,问题在于PageRenderer
包含几个子类要使用的实例变量:
public abstract class PageRenderer {
protected A a;
protected B b;
protected C c;
protected D d;
Protected E e;
//there might be even more instance variables
}
PageRenderer
的所有子类都共享这些实例变量
根据上述条件,我将更改PageRenderFactory
,使其包含上述实例变量:
问题:在这种情况下,我可能需要在这个
页面渲染器工厂
上使用setter,但是这个工厂似乎混合了构建器模式!那么这是一个好的解决方案吗?或者该解决方案有更好的替代方案吗?您使用Factory的决定是正确的。
这家工厂将如何创建并不重要
直拨
Factory factory = new Factory();
通过直接调用setter
Factory factory = new Factory();
factory.setA(a);
...
factory.setE(e);
通过参数调用
Factory factory = new Factory(a, b, c, d, e);
或者通过建筑商
Factory factory = new Factory.Builder()
.withA(a)
...
.withE(e)
.build();
像我一样,带参数的构造函数更可取,因为它可以防止您丢失一个或多个内部字段。谁说不能将生成器模式与factory模式一起使用?没有人说:D,但它看起来有点奇怪,我看不出有任何理由不这样做,所以创建一个生成器吧!什么意思?我不明白你的意思
Factory factory = new Factory.Builder()
.withA(a)
...
.withE(e)
.build();