2009-03-25 8 views
3

Imデザインパターンに若干新しく、これはstackoverflowの最初の投稿です。うまくいけば、この質問は意味をなさないでしょう。 Iveは、異なるチャートベンダ(ダンダ、フラッシュなど)のXMLストリングの生成を処理する抽象ファクトリを作成しました。以下は、私の工場のコード概要です(私が助けてくれればさらに多くを含めることができます)。私のクライアントは、すべてのタイプのチャート(キャプション、アニメーションなど)に共通するプロパティを設定できるようにしています。抽象ファクトリパターンとプロパティ

 GraphCreator fusion = new FusionGraphs(); 

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

これを行うには、どのような方法が最適ですか?今、Imは抽象的なクリエイターのプロパティを設定するので、クライアントはそれらにアクセスできるようになりますが、Imは私の工場でこれらのプロパティを複製してxmlを構築する際にアクセスできます。

//これは私があなたの何とか考えて、これは具体的な作成者

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; 
    } 


} 

答えて

1

私はこの全体の範囲を理解しているかどうかはわかりませんが、これはグラフのさまざまな種類の共有プロパティを表すオブジェクトを作成し、そのオブジェクトを具体的なクリエータによってアクセス可能な抽象的なクリエータのプロパティであり、個々のxmlFactoryコンストラクタにパラメータとして渡される可能性もあります。呼び出し元は、公開するプロパティにアクセスすることにより、そのオブジェクトに対してこれらのプロパティを直接設定することができ、具象クラスはそのオブジェクトからオブジェクトを読み取ることができます。しかし、呼び出し元は、これらの共通プロパティにアクセスするためにさらに1つのレベルの間接参照を実行します。

あなたはどのような重複を持っているのかよく分かりません。あなたは抽象的な作成者に実装されたプロパティを持っていますが、 "工場でこれらのプロパティを複製する"と言っていますか?あなたは具体的な作成者を指していますか?私はなぜ、あなたがbase.Captionを参照しているのか分からないので、FusionGraphsで何かを複製する必要があります.GraphCreatorからすべて継承されていて、基本クラスの実装を使用していますか?

+0

私は重複部分を省いたと思います。私は実際に、キャプションのGraphCreatorクラスで同じプロパティを作成します。私はクライアントに(グラフクラスまたは何かを介して)アクセスできるようにする必要があるように見えるし、内部でアクセスできるようにxmlfactoryの小道具を作る。 – rahkim

+0

結論は、同じプロパティを2回作成する方法がわかりません。顧客のために1回、工場のために1回。クライアントがそれを見ることができるようにプロパティを作成する方法はありますか?具体的なサブクラスはそれにアクセスできますか? – rahkim

+0

xmlFactoryのプロパティがなくてもいいですか?代わりにGraphCreatorによって実装されたインターフェイス "ICommonGraphProps"があり、共通プロパティの値を読み取る必要があるときはいつでもxmlFactoryがICommonGraphPropsのメンバーにアクセスできるようにすることができますか? – BlueMonkMN

0

です//これは抽象作成者である

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 interface IXMLFactory 
{ 

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

} 

//です問題は、ファクトリを呼び出すクラスとファクトリ自体の間で設定情報を共有する方法です。構成情報(キャプションなど)を保持する別のクラスを実装し、工場と作成者の両方に参照を渡します。

関連する問題