用于抽象现有对象的设计模式

时间:2009-11-25 07:12:32

标签: c# design-patterns adapter

我想创建一个现有对象的抽象表示。对于此示例,我想包装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);
        }
    }
}

我在扩展类以接受子节点时遇到问题...我上面使用的方法感觉不太好。知道如何改进吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Abstract factory pattern

如果您可能想知道它不仅限于新对象,您可以将其用于现有对象。

答案 1 :(得分:0)

  1. 将您的界面名称更改为ITreeNode或类似名称。您正在使用该界面创建抽象。适配器是一种实现,使其看起来像一个理想的抽象

  2. 您在添加孩子时遇到问题?将方法添加到您定义的ITreeNode接口,然后在适配器中实现它。