喜迎
春节

设计模式——组合模式


说明

又叫部分-整体模式,在处理类似树形结构的问题时比较方便。

示例

下面看下组合模式的代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
class TreeNode{
private string $name;
private TreeNode $parent;
private ?TreeNode $children=null;

public function __construct(string $name){
$this->name = $name;
}
public function getName(): string{
return $this->name;
}
public function setName(string $name){
$this->name = $name;
}

public function getParent(): TreeNode{
return $this->parent;
}

public function setParent(TreeNode $parent){
$this->parent = $parent;
}

//添加子节点
public function add(TreeNode $node){
$this->children = $node;
}
//删除子节点
public function remove(TreeNode $node){
//unset($this->children->{$node});
$this->children->remove($node);
}
//取得子节点
public function getChildren(): ?TreeNode{
return $this->children;
}
}

// test
$root = new TreeNode('A');
$nodeB = new TreeNode('B');
$nodeC = new TreeNode('C');


$nodeB->add($nodeC);
$root->add($nodeB);
print_r($root);
echo "build the tree finished!";

/**
* output:
*
TreeNode Object
(
[name:TreeNode:private] => A
[children:TreeNode:private] => TreeNode Object
(
[name:TreeNode:private] => B
[children:TreeNode:private] => TreeNode Object
(
[name:TreeNode:private] => C
[children:TreeNode:private] =>
)

)

)
build the tree finished!
*/

总结

使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等。


文章作者: Crazy Boy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Crazy Boy !
评 论
 上一篇
设计模式——简单工厂方法模式
设计模式——简单工厂方法模式
说明凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 示例下面讲解下静态工厂方法模式的代码实现 创建公共接口123interfa
2022-05-19
下一篇 
设计模式——装饰模式
设计模式——装饰模式
说明 装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 示例下面看下装饰模式的代码实现 1234567891011121314151617181920212223
2022-05-19
  目录
hexo