2705/090
AAS3WDP-Chapter 8 Composite 组合模式(上)
啊,这一贴比较麻烦,内容也比较多,所以准备分上下部分来完成。
那么,什么是组合模式呢?
组合模式是将对象之间的关系以数据结构中的2叉树表现出来,使得客户端将单纯的元素与复杂元素同等看待,这样的话使得用户在操作不同的子类元素时可以和根节点元素一样操作,在透明模式下即根元素和叶元素公用同一个接口达到共同的结果。组合模式就是解决部分与整体的关系的一种模式。
这一章是以文件系统为例,文件分为"文件夹"和"文件"两种,恩,就是这样。那么我们先来建立一个共用接口IFileSystemItem:
package{
import IIterator;//PS:第7章的类
public interface IFileSystemItem{
function iterator():IIterator;
function addItem(item:IFileSystemItem):void;
function removeItem(item:IFileSystemItem):void;
function getName():String;
function setName(name:String):void;
function getParent():IFileSystemItem;
function setParent(parent:IFileSystemItem):void;
}
}
这次的例子是和迭代器模式合作,文件有点多……该接口定义了叶子元素和组合元素需要用到的方法。
接下来,自然是实现该接口的类FileSystemItem:
package{
import IIterator;//PS:第7章的类
public class FileSystemItem implements IFileSystemItem{
protected var _parent:IFileSystemItem;
protected var _name:String;
public function FileSystemItem(){
}
public function iterator():IIterator{
return null;
}
public function addItem(item:IFileSystemItem):void{
}
public function removeItem(item:IFileSystemItem):void{
}
public function getName():String{
return _name;
}
public function setName(name:String):void{
_name=name;
}
public function getParent():IFileSystemItem{
return _parent;
}
public function setParent(parent:IFileSystemItem):void{
_parent=parent;
}
}
}
这个类没什么好讲的,下边是叶子元素文件类和组合元素目录类:
File.as:
package{
import FileSystemItem;
import NullIterator;//PS:第7章的类
public class File extends FileSystemItem{
public function File(){}
override public function iterator():IIterator{
return new NullIterator();
}
}
}
File类只重写了iterator方法,因为File类没有addItem和removeItem方法~
Directory.as:
package{
import FileSystemItem;
import ArrayIterator;//PS:第7章的类
public class Directory extends FileSystemItem{
private var _items:Array;
public function Directory(){
_items=new Array();
}
override public function addItem(item:IFileSystemItem):void{
_items.push(item);
}
override public function removeItem(item:IFileSystemItem):void{
var i:uint;
for(i=0; i < _items .length;i++){
if(_items[i]==item){
_items.splice(i,1);
}
}
}
override public function iterator():IIterator{
return new ArrayIterator(_items);
}
}
}
Directory类重写了iterator方法,addItem和removeItem方法~
到此,叶子元素和组合元素构建完毕,下边咱开始具体应用,《AAS3WDP-Chapter 8 Composite 组合模式(下)》。