首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象工厂模式和属性

抽象工厂模式和属性
EN

Stack Overflow用户
提问于 2009-03-25 14:51:56
回答 2查看 1.6K关注 0票数 3

我对设计模式有些陌生,这是我在stackoverflow上的第一篇文章,所以希望这个问题能有意义。我创建了一个抽象工厂来处理为不同图表供应商(dundas、flash等)生成xml字符串。下面是我的工厂的代码大纲(如果有帮助,我可以提供更多)。我希望我的客户能够设置属性,这些属性将在所有类型的图表(标题,动画等)中通用。所以客户端可以这样做:

代码语言:javascript
复制
        GraphCreator fusion = new FusionGraphs();

        //set the props for the graph
        fusion.Caption = "Fusion 2D Line Chart";

做这件事最好的方法是什么?现在,我正在抽象创建器中设置属性,以便客户端可以访问它们,但我还必须在工厂中复制这些属性,以便在构建xml时可以访问它们。

//这是抽象工厂

代码语言:javascript
复制
public interface IXMLFactory
{

    //add interface methods
    IRoot makeRoot();
    IRootAttrib makeRootAttrib();
    INodes makeNodes();
    INodeAttrib makeNodeAttrib();

}

//这是抽象创建者

代码语言:javascript
复制
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);

}

//这是具体的创建者

代码语言:javascript
复制
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;
    }


}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-26 02:49:44

我不确定我是否理解了整个范围,但似乎您应该能够创建一些表示不同类型图的共享属性的对象,并将该对象公开为抽象创建者的属性,由具体创建者访问,甚至可以作为参数传递给各个xmlFactory构造器。调用方可以通过访问公开该对象的属性来直接在该对象上设置这些属性,并且具体的类可以从该对象中读取它们。然而,这确实意味着调用者需要经过更多级别的间接访问才能访问这些公共属性。

我不太明白你有什么重复的东西。你已经在抽象创建器上实现了属性,但你说你也“在工厂中复制这些属性”?你指的是具体的创造者吗?我不明白为什么--您指的是base.Caption,那么如果FusionGraphs都继承自GraphCreator,并且您正在使用它的基类实现,那么为什么还要在base中复制任何东西呢?

票数 1
EN

Stack Overflow用户

发布于 2009-03-25 15:00:25

我想你的问题是如何在调用工厂的类和工厂本身之间共享配置信息。实现一个单独的类来保存配置信息(例如标题),然后向工厂和创建者提供对它的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/681952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档