将对象组合成树形结构以表示“部分-整体”的结构,使得对单个对象和组合对象的使用具有一致性。
主要组成:
Component-父组件
Leaf-叶节点
Composite-叶节点的组合
相关类代码:
using System;
using System.Collections.Generic;
namespace Composite
{
/// <summary>
/// 文件父组件
/// </summary>
abstract class FileComponent
{
public virtual void Open()
{
}
}
/// <summary>
/// 文件夹(文件组合)
/// </summary>
class FolderComposite : FileComponent
{
List<FileComponent> fileList = new List<FileComponent>();
public void Add(FileComponent file)
{
fileList.Add(file);
}
public void Remove(FileComponent file)
{
fileList.Remove(file);
}
public override void Open()
{
Console.WriteLine("打开文件夹下所有文件:");
foreach (FileComponent file in fileList)
{
file.Open();
}
}
}
/// <summary>
/// 文本文件(叶节点)
/// </summary>
class TextFileLeaf : FileComponent
{
public override void Open()
{
Console.WriteLine("打开文本文件");
}
}
/// <summary>
/// 图像文件(叶节点)
/// </summary>
class ImageFileLeaf : FileComponent
{
public override void Open()
{
Console.WriteLine("打开图像文件");
}
}
}
调用:
using System;
namespace Composite
{
class Program
{
static void Main(string[] args)
{
//文本文件
TextFileLeaf textFile=new TextFileLeaf();
textFile.Open();
//图像文件
ImageFileLeaf imageFile = new ImageFileLeaf();
imageFile.Open();
Console.WriteLine("-------");
//文件夹(文件组合)
FolderComposite folder = new FolderComposite();
folder.Add(textFile);
folder.Add(imageFile);
folder.Open();
}
}
}
结果:
参考资料:《设计模式-可复用面对对象软件的基础》