C#设计模式之组合(Composite)

 

1.  为什么要用组合?用组合的好处

比如我们有树状结构的对象,我们就可以用组合(Composite)设计模式。我可以很清楚的表示对象的结构。

 

2.  C#中怎样用组合?

GOF中的组合模式:


Leaf
相当于树状结构最底层对象,即树的叶子。

Composite相当于树干,树干下面可以包含树干,当然也可以包含叶子。

它们共同继承树的部分(Component)

现实世界中一个具体的例子:

文件夹的例子,文件夹包含子文件夹和文件。
//文件和文件夹的父接口
public interface folderbase
{
void AddChild(folderbase f); //添加子文件夹
void display(); //显示文件或文件夹
}

//文件 .
public class file : folderbase
{
private int value = 0;
public file(int val)
{
value
= val;
}

public override void AddChild(folderbase c)
{
//这里没有子文件,所以为空
}

public override void display()
{
Console.WriteLine(
"文件:"+value);
}

}

//文件夹类.
public class folder : folderbase
{
private int value = 0;
private ArrayList folderlist = new ArrayList();
public folder (int val)
{
value
= val;
}


public override void AddChild(folderbase c) //添加子文件夹
{
folderlist.Add(c);
}

public override void display()
{
Console.WriteLine(
"文件夹:"+value);
foreach (folderbase c in folderlist)
{
c.display();
//可以显示所有子文件或子文件夹
}

}

}

class MyMain
{
public static void Main()
{
//创建文件夹树.
folder root = new folder(100);// 根文件夹
folder com1 = new folder(200); //文件夹1

file l1
= new file(10);//文件1
file l2 = new file(20);//文件2
//添加两个文件到文件夹1中
com1.AddChild(l1);
com1.AddChild(l2);
Leaf l3
= new Leaf(30);//文件3
root.AddChild(com1);//添加文件1到根文件夹中
root.AddChild(l3);//添加文件3到根文件夹中
root.display();//显示根文件夹下所有的文件及文件夹
}

}

posted @ 2004-06-28 17:39  Martin XJ  阅读(2161)  评论(4编辑  收藏  举报