第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

關(guān)于組合模式的疑惑

關(guān)于組合模式的疑惑

海綿寶寶撒 2018-12-07 00:22:57
請問: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)?
查看完整回答
反對 回復(fù) 2018-12-09
?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

這樣做也行的, 但是不能保證不被延伸. 使用 leaf 就能確定節(jié)點(diǎn)到處為止,不能再被延伸出去.
查看完整回答
反對 回復(fù) 2018-12-09
  • 2 回答
  • 0 關(guān)注
  • 386 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號