設計模式練習:Composite模式

來源:互聯網
上載者:User

package<br />{</p><p> public class Tree<br /> {<br /> private var name:String<br />public function Tree(name:String)<br />{<br />this.name=name;<br />}</p><p>public function Add(node:Tree):void<br />{</p><p>}</p><p>public function get Name():String<br />{<br /> return this.name;<br />}</p><p>public function Remove(node:Tree):void<br />{</p><p>}<br />//返回對象列表<br />public function children():Array<br />{<br />return null;<br />}</p><p>public function getChild(name:String):Tree<br />{<br /> return null;<br />}</p><p>public function Display():void<br />{</p><p>}</p><p> }</p><p>}

 

今天仿了一個設計模式進行練習,這個和電腦資料結構的樹很有關係,或者在我們使用的DisplayObjectContainer 容器類也有很大的關係,因為它的設計就是根據這個模式來設計來進行的。我們可以發現

DisplayObjectContainer 類當中也存在添加子葉 如下面

  addChild(child:DisplayObject):DisplayObject 將一個 DisplayObject 子執行個體添加到該 DisplayObjectContainer 執行個體中

 

同樣也有刪除的操作 ,

  removeChild(child:DisplayObject):DisplayObject 從 DisplayObjectContainer 執行個體的子列表中刪除指定的 child DisplayObject 執行個體。

檢索的操作,交換的操作。等等。

 

 

通過這個模式,我們可以發現原來adobe 設計師已經在設計這個類的時候 加入這個模式當中去。這樣我們對這種開發的方法有所瞭解後,更加會明白了。這些與資料結構有很多關係,我們不知不覺已經使用這些東西,是不是很神奇呢?

 

 

package<br />{</p><p> public class Node extends Tree<br /> {<br /> private var list:Array=new Array();<br />public function Node(name:String)<br />{<br />super(name);<br />}</p><p>override public function Add(node:Tree):void<br />{<br />list.push(node);<br />}</p><p>override public function Remove(node:Tree):void<br />{<br />for(var i in list)<br />{<br />if(list[i]==node)<br />{<br />list.splice(i,1);<br />}<br />}//查詢對應的鍵,就可以知道數組存取的值<br />}</p><p>override public function children():Array<br />{<br />return list;<br />}</p><p>override public function getChild(Name:String):Tree<br />{<br />var mytree:Tree=null;<br />for each(var tree:Tree in list)<br />{<br />if(tree.Name==Name)<br />{<br />mytree=tree;<br />break;<br />}</p><p>}</p><p> return mytree;<br />}</p><p>override public function Display():void<br />{<br />trace(this.Name);<br />for each(var tree:Tree in list)<br />{</p><p>trace(tree.Name);</p><p>}</p><p>}</p><p> }</p><p>}

 

 結合到這種結構,我們同樣也可以實現一些很不錯的效果。嘗試一下

 

package<br />{<br />import flash.display.Sprite;<br />import flash.events.*;<br /> public class Test extends Sprite<br /> {<br /> private var node:Node;<br />public function Test()<br />{<br /> node=new Node("一級分類");<br /> node.Add(new Tree("金剛狼"));<br /> node.Add(new Tree("磁力保密"));<br /> node.Display();</p><p> var node2:Node=new Node("二級分類");<br /> node2.Add(new Tree("英雄"));<br /> node2.Add(new Tree("越獄"));<br /> node2.Display();<br /> var tree:Tree=node2.getChild("英雄");<br /> trace(tree.Name);<br />}</p><p> }</p><p>}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.