組合模式:允許你將對(duì)象組合成樹(shù)形結(jié)構(gòu)來(lái)表現(xiàn)“整體/部分”層次結(jié)構(gòu)。組合能讓客戶(hù)以一致的方式處理個(gè)別對(duì)象以及對(duì)象組合。
組合模式類(lèi)圖: Client:客戶(hù)使用Component接口操作組合中的對(duì)象。 Component:Component為組合中的所有對(duì)象定義一個(gè)接口,不管是組合還是節(jié)點(diǎn),Component可以為add(),remove(),eachChild()實(shí)現(xiàn)一些默認(rèn)的行為。 Leaf:葉節(jié)點(diǎn)沒(méi)有孩子。葉節(jié)點(diǎn)通過(guò)實(shí)現(xiàn)Composite支持的操作,定義了組合內(nèi)元素的行為。 Composite:Composite的角色是要定義組件的行為,而這樣的組件具有子節(jié)點(diǎn)。
抽象類(lèi)Component代碼實(shí)現(xiàn):
public abstract class Component { String name; public Component(String name){ this.name = name; } public abstract void Add(Component component); public abstract void remove(Component component); public abstract void eachChild();}Leaf類(lèi)代碼實(shí)現(xiàn):
public class Leaf extends Component{ public Leaf(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Component component) { // TODO Auto-generated method stub } @Override public void remove(Component component) { // TODO Auto-generated method stub } @Override public void eachChild() { // TODO Auto-generated method stub System.out.Composite類(lèi)代碼實(shí)現(xiàn):public class Composite extends Component{ ArrayList<Component> list = new ArrayList<Component>(); public Composite(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Component component) { // TODO Auto-generated method stub list.add(component); } @Override public void remove(Component component) { // TODO Auto-generated method stub list.remove(component); } @Override public void eachChild() { // TODO Auto-generated method stub System.out.println("節(jié)點(diǎn):"+name); for(Component component : list){ component.eachChild(); } }}Client類(lèi)代碼實(shí)現(xiàn):
public class Client { public static void main(String[] args){ Component rootComposite = new Composite("根節(jié)點(diǎn)"); Component leftComposite = new Composite("左子節(jié)點(diǎn)"); Component rightComposite = new Composite("右子節(jié)點(diǎn)"); Component leftleaf1 = new Leaf("左葉節(jié)點(diǎn)1"); Component leftleaf2 = new Leaf("左葉節(jié)點(diǎn)2"); leftComposite.Add(leftleaf1); leftComposite.Add(leftleaf2); rootComposite.Add(leftComposite); rootComposite.Add(rightComposite); rootComposite.eachChild(); }}運(yùn)行結(jié)果:
節(jié)點(diǎn):根節(jié)點(diǎn)節(jié)點(diǎn):左子節(jié)點(diǎn)葉節(jié)點(diǎn):左葉節(jié)點(diǎn)1葉節(jié)點(diǎn):左葉節(jié)點(diǎn)2節(jié)點(diǎn):右子節(jié)點(diǎn)新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注