gpt4 book ai didi

java - 当工厂需要创建具有多个公共(public)参数的对象时,如何解决困境?

转载 作者:行者123 更新时间:2023-11-30 10:06:47 24 4
gpt4 key购买 nike

我有一组 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 的所有子类共享这些实例变量。

根据上述条件,我将更改 PageRendererFactory,使其包含上述实例变量:

public class PageRendererFactory extends AbstractFactory {
private A a;
private B b;
private C c;
private D d;
Private E e;
//there might be even more instance variables here
PageRenderer createPageRenderer(Type type) {
//use the instance variables to instantiate the subclass of PageRenderer according to the Type
}
}//Code AbstractFactory is skipped here

问题:在这种情况下,我可能需要此 PageRendererFactory 的 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();

对我来说,带参数的构造函数更可取,因为它可以防止您丢失一个或多个内部字段。

关于java - 当工厂需要创建具有多个公共(public)参数的对象时,如何解决困境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54501773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com