我有一组PageRenderer抽象类的子类,例如ImagePageRendererTextPageRendererVideoPageRenderer.所以为了获取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,但是这个工厂似乎与构建器模式混合在一起!那么这是一个好的解决方案吗?或者这个解决方案有更好的选择吗?
1 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
您决定使用 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();
和我一样,带参数的构造函数更可取,因为它可以防止您丢失一个或多个内部字段。
添加回答
举报
0/150
提交
取消
