组合模式(Composite Pattern)又叫做部分-整体模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。
常见使用场景:如树形菜单、文件夹菜单、部门组织架构图等。
关键代码:部分-整体场景,树枝内部组合该接口,并且含有内部属性 List,里面放 Component。
示例代码:
文件节点:Filer
class Filer {
private $file_name;//文件名
public function __construct($file_name){
$this->file_name = $file_name;
}
//文件显示方法
public function display(){
print_r($this->file_name);
}
}
目录节点:Noder
class Noder {
private $node_name;//目录名
private $list = array(); //下级目录、文件列表
public function __construct($node_name){
$this->node_name = $node_name;
}
//新增下级目录
public function addNoder(Noder $noder){
array_push($this->list, $noder);
}
//新增文件
public function addFiler(Filer filer){
array_push($this->list, $filer);
}
//显示下级目录及文件
public function display(){
print_r($this->node_name);
foreach($this->list as $item){
$item.display();
}
}
}
测试类:Clienter
$noder = new Noder("home");
$noder->addFilter(new Filer("fileA"));
$noder->addFilter(new Filer("fileB"));
$usr = new Noder("usr");
$noder->addNoder($usr);
$usr->addFiler("fileC");
$noder->display();
网友评论