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>}