组合模式

组合模式(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 条评论