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设计模式中处理树形结构数据怎么使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联-成都网站建设公司行业资讯频道。

当前名称:php设计模式中处理树形结构数据怎么使用-创新互联
分享网址:https://www.cdcxhl.com/article12/dehcdc.html

成都网站建设公司_创新互联,为您提供关键词优化网站内链微信小程序网站设计公司服务器托管移动网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司