组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。
组合能让客户以一致的方式处理个别对象以及对象组合。
在组合模式中,可以将对象分为两种:叶子节点和容器节点。
叶子节点表示最终的对象,而容器节点则表示包含其他节点的对象。
下面是一个使用PHP实现组合模式的示例代码:
// 定义组件接口
interface Component
{
public function operation();
}
// 实现叶子节点
class Leaf implements Component
{
public function operation()
{
echo "Leaf operation\n";
}
}
// 实现容器节点
class Composite implements Component
{
private $children = [];
public function add(Component $component)
{
$this->children[] = $component;
}
public function remove(Component $component)
{
foreach ($this->children as $key => $child) {
if ($child === $component) {
unset($this->children[$key]);
}
}
}
public function operation()
{
echo "Composite operation\n";
foreach ($this->children as $child) {
$child->operation();
}
}
}
// 使用示例
$leaf = new Leaf();
$composite = new Composite();
$composite->add($leaf);
$composite->operation();
在上面的示例代码中,我们定义了一个Component接口,其中包含了一个operation()方法用于执行操作。
Leaf类实现了Component接口,表示叶子节点,它的operation()方法执行叶子节点的操作。
Composite类也实现了Component接口,表示容器节点,它包含了一个$children数组用于存储子节点,以及add()和remove()方法用于添加和移除子节点。
Composite类的operation()方法遍历子节点并调用它们的operation()方法。
在使用示例中,我们创建了一个Leaf对象和一个Composite对象,并将Leaf对象添加到Composite对象中。最后,我们调用了Composite对象的operation()方法来执行整个组合结构的操作。
评论
共0 条评论