设计模式(十):组合模式

组合模式(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();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容