Я немного новичок в разработке шаблонов, и это мой первый пост в stackoverflow, так что, надеюсь, этот вопрос будет иметь смысл. Я создал абстрактную фабрику для обработки строк XML для разных поставщиков диаграмм (dundas, flash и т. Д.). Ниже приведена схема кода моей фабрики (я могу добавить больше, если это поможет.) Мне бы хотелось, чтобы мой клиент мог устанавливать свойства, которые будут общими для всех типов диаграмм (заголовок, анимация и т. Д.), Чтобы клиент мог сделать что-то вроде этого:
GraphCreator fusion = new FusionGraphs();
//set the props for the graph
fusion.Caption = "Fusion 2D Line Chart";
Каков наилучший способ сделать это? Прямо сейчас я задаю свойства в авторе создания абстрактных данных, чтобы клиент мог иметь к ним доступ, но мне также необходимо продублировать эти свойства на своей фабрике, чтобы я мог получить к ним доступ при создании XML.
// это абстрактная фабрика
public interface IXMLFactory
{
//add interface methods
IRoot makeRoot();
IRootAttrib makeRootAttrib();
INodes makeNodes();
INodeAttrib makeNodeAttrib();
}
// это абстрактный создатель
public abstract class GraphCreator
{
public virtual Graph getGraph(Graph.Types graphType)
{
//abstract product
Graph graph;
//abstract product creation
graph = buildGraph(graphType);
graph.draw();
return graph;
}
public abstract Graph buildGraph(Graph.Types graphType);
}
// это конкретный создатель
public class FusionGraphs : GraphCreator
{
Graph g = null;
//XML parts for fusion 2D multi series
IXMLFactory xmlFactory;
//use xml parts that are needed for the type of fusion graph requested
public override Graph buildGraph(Graph.Types graphType)
{
switch (graphType)
{
case Graph.Types.Single2DLine:
xmlFactory = new Fusion2DSingleXMLFactory();
g = new Single2DLineGraph(xmlFactory);
xmlFactory.Caption = base.Caption;
break;
case Graph.Types.Single2DBar:
xmlFactory = new Fusion2DSingleXMLFactory();
g = new Single2DBarGraph(xmlFactory);
break;
}
return g;
}
}