У меня есть набор подклассов 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
, но тогда эта фабрика, кажется, смешивается с шаблоном !Так это хорошее решение?или есть ли лучшая альтернатива для этого решения?