はComposite pattern
、ノードにアクセスし、そのタイプを気にしない場合によく使用されます。どのようにノードにアクセスしていますか? あなたは彼らと何をしていますか?あなたの目標は、メンテナンスを改善することです。このパターンは、各ノードを同じオブジェクトとして扱う必要がある場合にのみ適用されます。
次のコードのようなものを試してください。
public interface IMyNode
{
void Print();
}
public class A : IMyNode
{
public void Print()
{
Console.WriteLine("I am a child of T. A or B");
}
}
public class C : IMyNode
{
public void Print()
{
Console.WriteLine("I am a child of A or B, I am C.");
}
}
public class D : IMyNode
{
public void Print()
{
Console.WriteLine("I am a child of C. I am D.");
}
}
public class CompositeMyNode : IMyNode
{
private readonly List<IMyNode> nodes;
public CompositeMyNode()
{
nodes= new List<IMyNode>();
}
public void Add(IMyNode node)
{
nodes.Add(node);
}
public void AddRange(params IMyNode[] node)
{
nodes.AddRange(node);
}
public void Delete(IMyNode node)
{
nodes.Remove(node);
}
public void Print()
{
foreach (IMyNode childMyNode in nodes)
{
childMyNode.Print();
}
}
}
この場合、実際にどのノードを持っているかを気にせずに、各ノードの情報をプライティングしています。
var compositeMyNode = new CompositeMyNode();
var compositeMyNode1 = new CompositeMyNode();
var compositeMyNode2 = new CompositeMyNode();
compositeMyNode1.Add(new A());
compositeMyNode2.AddRange(new A(), new A());
compositeMyNode.AddRange(new C(), compositeMyNode1, compositeMyNode2);
// Will print 4 nodes: A, A, A, C.
compositeMyNode.Print();
ウィキペディアの記事からの例。複合設計パターンのその他の例と説明については、このスタックオーバーフローの質問も参照してください。