首页后端开发PHPphp设计模式之组合模式——处理树形结构数据

php设计模式之组合模式——处理树形结构数据

时间2024-02-02 09:07:03发布访客分类PHP浏览588
导读:收集整理的这篇文章主要介绍了php设计模式之组合模式——处理树形结构数据,觉得挺不错的,现在分享给大家,也给大家做个参考。关于组合模式,千万不要从字面理解,它和我们理解的组合关系没什么关系,它是用来处理树状结构的数据。因为它只能处理树形结构...
收集整理的这篇文章主要介绍了php设计模式之组合模式——处理树形结构数据,觉得挺不错的,现在分享给大家,也给大家做个参考。关于组合模式,千万不要从字面理解,它和我们理解的组合关系没什么关系,它是用来处理树状结构的数据。因为它只能处理树形结构的数据,所以在日常中并不是很常用,但如果满足了树形结构,使用该模式就能非常好的处理,能够大大减少代码量,写出的代码简洁明了。

定义

组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。它的核心就在于递归,通过递归来依次处理树形结构数据。

场景

文件目录树就是一个典型的树形结构的数据。下面展示一个用于计算文件或目录大小的功能的类,主要有两个方法,添加子节点(子树)addNode,统计文件或目录大小fileSize。

class File{
        PRivate $path = '';
        private $nodes = [];
        private $fileSize = 0;
        public function __construct(string $path, int $fileSize)    {
            $this->
    path = $path;
            $this->
    fileSize = $fileSize;
    }
        public function addNode (File $node)    {
            $this->
    nodes[] = $node;
    }
        public function fileSize ()    {
            $size = 0;
            foreach ($this->
nodes as $node) {
                $size += $node->
    fileSize();
        }
            return $size;
    }
}
    

下面模拟出以下的目录树

/app/app/1.txt/app/a/app/b/app/a/a1.txt/app/b/b1.txt/app/b/b2.txt

测试代码如下:

$node0 = new File('/app', 0);
    $node1 = new File('/app/1.txt', 1000);
    $node2 = new File('/app/a', 0);
    $node3 = new File('/app/b', 0);
    $node21 = new File('/app/a1.txt', 1000);
    $node31 = new File('/app/b1.txt', 1000);
    $node32 = new File('/app/b2.txt', 1000);
    $node2->
    addNode($node21);
    $node3->
    addNode($node31);
    $node3->
    addNode($node32);
    $node0->
    addNode($node1);
    $node0->
    addNode($node2);
    $node0->
    addNode($node3);
    // 计算目录/app/b大小echo $node3->
    fileSize() . 'B' . PHP_EOL;
     // 2000// 计算/app目录大小echo $node0->
    fileSize() . 'B' . PHP_EOL;
     // 4000

总结

组合模式,将一组对象组织成树形的结构,然后将对象看做是树的节点。利用树形的数据结构,使用递归来处理每个子树,依次来简化代码实现。因为该模式对于数据有严格的要求,所以在日常中用到的并不多。如想使用该模式,需要你对业务场景非常的了解,然后能把数据抽象成树形结构。一般我们常见的有,文件的目录树、无限极分类的处理等等。

以上就是php设计模式之组合模式——处理树形结构数据的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php设计模式之组合模式——处理树形结构数据
本文地址: https://pptw.com/jishu/596639.html
什么是装饰者模式,它与桥接模式有什么不同? 什么是适配器模式,它有哪些应用场景

游客 回复需填写必要信息