0

既存のオブジェクトの抽象表現を作成したいと考えています。この例では、System.Windows.Forms.TreeNode の機能をラップします。次のようにアダプターを作成することから始めました...

編集:抽象化の目的により、TreeNode を知らなくてもアプリケーションで ITreeNodeAdapter を使用できます。後の段階で別の ITreeNodeAdapter を実装でき、アプリケーションは引き続き機能します。基本的に、TreeNode への依存関係を削除したいと考えています。

public interface ITreeNodeAdapter
{
    string Title {get;set;}
    void Add(ITreeNodeAdapter adapter);
}

public class TreeNodeAdapter : ITreeNodeAdapter
{    
    public AbstractTreeNode(TreeNode node)
    {
        this.Node = node;
    }

    private TreeNode Node {get;set;}

    public string Title
    {
        get { return _node.Text; }
        set { _node.Text = value; }
    }

    public void Add(ITreeNodeAdapter adapter)
    {
        // What should i do here?
        var treeNodeAdapter = adapter as TreeNodeAdapter;
        if(treeNodeAdapter != null)
        {
            this.Node.Nodes.Add(treeNodeAdapter.Node);
        }
    }
}

子ノードを受け入れるようにクラスを拡張する際に問題があります...上記で使用したアプローチはあまり良くありません。どうすれば改善できるでしょうか?

4

2 に答える 2

1

抽象ファクトリパターンを使用できます。

新しいオブジェクトに限定されないのではないかと思うかもしれませんが、既存のオブジェクトに使用できます。

于 2009-11-25T22:49:00.333 に答える
0
  1. インターフェイス名を ITreeNode などに変更します。インターフェイスで抽象化を作成しています。アダプターは、1 つの実装を取り、それを望ましい抽象化のように見せるものです

  2. 子供を追加する際に問題が発生している場所はどこですか? 定義した ITreeNode インターフェイスにメソッドを追加し、アダプタに実装します。

于 2009-11-25T07:31:34.867 に答える