請問:1、組合模式到底有什么用,誰能舉一個(gè)自己真正用過這個(gè)模式的例子?2、為什么要區(qū)分leaf和composite比如:
namespace MyConApp{//1、抽象類Componentpublic abstract class Component{protected string name;
public Component(string name){this.name = name;}
public abstract void Add(Component c);public abstract void Remove(Component c);public abstract void Diaplay(int depth);}
////2、葉子節(jié)點(diǎn)Leaf 繼承于Component//public class Leaf : Component//{
// public Leaf(string name)// : base(name)// {// }
// public override void Add(Component c)// {// Console.WriteLine("不能向葉子節(jié)點(diǎn)添加子節(jié)點(diǎn)");// }
// public override void Remove(Component c)// {// Console.WriteLine("葉子節(jié)點(diǎn)沒有子節(jié)點(diǎn)");// }
// public override void Diaplay(int depth)// {// Console.WriteLine(new string('-', depth) + name);// }//}
//3、組合類Composite繼承于Component,擁有枝節(jié)點(diǎn)行為public class Composite : Component{
List children;
public Composite(string name): base(name){if (children == null){children = new List();}}
public override void Add(Component c){this.children.Add(c);}
public override void Remove(Component c){this.children.Remove(c);}
public override void Diaplay(int depth){Console.WriteLine(new String('-', depth) + name);foreach (Component component in children){component.Diaplay(depth + 2);}}}public class Test{public static void t(){
Composite root = new Composite("根節(jié)點(diǎn)root");root.Add(new Composite("根上生出的葉子A"));root.Add(new Composite("根上生出的葉子B"));
Composite comp = new Composite("根上生出的分支CompositeX");comp.Add(new Composite("分支CompositeX生出的葉子LeafXA"));comp.Add(new Composite("分支CompositeX生出的葉子LeafXB"));
root.Add(comp);
Composite comp2 = new Composite("分支CompositeX生出的分支CompositeXY");comp2.Add(new Composite("分支CompositeXY生出葉子LeafXYA"));comp2.Add(new Composite("分支CompositeXY生出葉子LeafXYB"));
comp.Add(comp2);
root.Add(new Composite("根節(jié)點(diǎn)生成的葉子LeafC"));Composite leafD = new Composite("leaf D");root.Add(leafD);root.Remove(leafD);root.Diaplay(1);Console.Read();}}}
可以看出,不用Leaf完全可以啊,為什么要區(qū)分leaf和composite呢?
2 回答

眼眸繁星
TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
leaf和composite 的職能 要弄清楚。
1. composite 雖然繼承Component,但自己實(shí)現(xiàn)的 Diaplay 并沒有自己的,只是調(diào)用leaf 的實(shí)現(xiàn),只是方便統(tǒng)一調(diào)用。
2. leaf只是一個(gè)例子,可以有很多l(xiāng)eaf1和leaf2,這是一種多態(tài)機(jī)制;如果沒有l(wèi)eaf,只有一個(gè) composite,只是一個(gè)實(shí)現(xiàn), 如何實(shí)現(xiàn)多態(tài)?

繁星淼淼
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
這樣做也行的, 但是不能保證不被延伸. 使用 leaf 就能確定節(jié)點(diǎn)到處為止,不能再被延伸出去.
- 2 回答
- 0 關(guān)注
- 386 瀏覽
添加回答
舉報(bào)
0/150
提交
取消