您的位置:首页 > 其它

23种设计模式之组合模式(Composite)

2011-06-05 13:24 381 查看
23种设计模式之组合模式(Composite)

组合模式又称为整体-部分(Part-whole)模式,属于对象的结构模式。在组合模式中,通过组合多个对象形成树形结构以表示整体-部分的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。

优点:

1)定义了由主要对象和复合对象组成的类层次结构

2)使得添加新的组件类型更加简单。

3)提供了结构的灵活性和可管理的接口。

使用场景:

1)想要表示对象的整个或者部分的层次结构。

2)想要客户端能够忽略复合对象和单个对象之间的差异。

3)结构可以具有任何级别的复杂性,而且是动态的。

 


Composite 模式

public class File : AbstractFile
{
public File(string name)
{
this.name = name;
}

public override bool AddChild(AbstractFile file)
{
return false;
}

public override bool RemoveChild(AbstractFile file)
{
return false;
}

public override IList<AbstractFile> GetChildren()
{
return null;
}
}


 

public abstract class AbstractFile
{
protected string name;
public void PrintName()
{
Console.WriteLine(name);
}

public abstract bool AddChild(AbstractFile file);
public abstract bool RemoveChild(AbstractFile file);
public abstract IList<AbstractFile> GetChildren();
}


 

public class Folder : AbstractFile
{
private IList<AbstractFile> childList;
public Folder(string name)
{
this.name = name;
this.childList = new List<AbstractFile>();
}

public override bool AddChild(AbstractFile file)
{
childList.Add(file);
return true;
}

public override bool RemoveChild(AbstractFile file)
{
childList.Remove(file);
return true;
}

public override IList<AbstractFile> GetChildren()
{
return childList;
}
}


 

AbstractFile rootFolder = new Folder("C://");
AbstractFile compositeFolder = new Folder("composite");
AbstractFile windowsFolder = new Folder("windows");
AbstractFile file = new Composite.File("TestComposite.cs");

rootFolder.AddChild(compositeFolder);
rootFolder.AddChild(windowsFolder);
compositeFolder.AddChild(file);

rootFolder.PrintName();
IList<AbstractFile> children = rootFolder.GetChildren();
foreach (AbstractFile item in children)
{
item.PrintName();
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息