百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> php设计模式之组合模式——处置树形构造数据
分享文章到:

php设计模式之组合模式——处置树形构造数据

发布时间:09/01 来源:未知 浏览: 关键词:
关于组合模式,千万不要从字面懂得,它和我们懂得的组合关系没什么关系,它是用来处置树状构造的数据。由于它只能处置树形构造的数据,所以在日常中并不是很常用,但假如知足了树形构造,使用该模式就能非常好的处置,能够大大减少代码量,写出的代码简约明了。

定义

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

场景

文件名目树就是一个典型的树形构造的数据。下面展现一个用于运算文件或名目大小的功效的类,主要有两个办法,增加子节点(子树)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设计模式之组合模式——处置树形构造数据的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板