我想创建一个现有对象的抽象表示。对于此示例,我想包装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);
}
}
}
我在扩展类以接受子节点时遇到问题...我上面使用的方法感觉不太好。知道如何改进吗?
答案 0 :(得分:1)
您可以使用Abstract factory pattern。
如果您可能想知道它不仅限于新对象,您可以将其用于现有对象。
答案 1 :(得分:0)
将您的界面名称更改为ITreeNode或类似名称。您正在使用该界面创建抽象。适配器是一种实现,使其看起来像一个理想的抽象
您在添加孩子时遇到问题?将方法添加到您定义的ITreeNode接口,然后在适配器中实现它。