<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1. 为什么要用组合?用组合的好处
比如我们有树状结构的对象,我们就可以用组合(Composite)设计模式。我可以很清楚的表示对象的结构。
2. 在C#中怎样用组合?
GOF中的组合模式:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
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();//显示根文件夹下所有的文件及文件夹
}
}
请发表评论