php设计模式之组合模式——处理树形结构数据
发布:smiling 来源: PHP粉丝网 添加日期:2022-07-21 20:50:45 浏览: 评论:0
关于组合模式,千万不要从字面理解,它和我们理解的组合关系没什么关系,它是用来处理树状结构的数据。因为它只能处理树形结构的数据,所以在日常中并不是很常用,但如果满足了树形结构,使用该模式就能非常好的处理,能够大大减少代码量,写出的代码简洁明了。
定义
组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。它的核心就在于递归,通过递归来依次处理树形结构数据。
场景
文件目录树就是一个典型的树形结构的数据。下面展示一个用于计算文件或目录大小的功能的类,主要有两个方法,添加子节点(子树)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
总结
组合模式,将一组对象组织成树形的结构,然后将对象看做是树的节点。利用树形的数据结构,使用递归来处理每个子树,依次来简化代码实现。因为该模式对于数据有严格的要求,所以在日常中用到的并不多。如想使用该模式,需要你对业务场景非常的了解,然后能把数据抽象成树形结构。一般我们常见的有,文件的目录树、无限极分类的处理等等。
Tags: php组合模式 php树形结构
- 上一篇:什么是适配器模式,它有哪些应用场景
- 下一篇:最后一页
相关文章
- ·PHP设计模式之组合模式定义与应用示例(2022-02-09)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)