23种设计模式-组合模式


23种设计模式-组合模式

概述

组合模式又名部分整体模式,是用于把一组相似的对象当做一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

结构

组合模式主要包含以下角色:

  • 抽象根节点:定义系统各层次对象的公有方法和属性,可以预先定义一些默认行为和属性。
  • 树枝节点:定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构。
  • 叶子节点:叶子节点对象,其下再无分支,是系统层次遍历的最小单位。

实现


/**
 * 表单结构抽象类
 * 抽象根节点
 */
abstract class FormStructure
{
    abstract public function render($indent = 0);
}

/**
 * 根节点
 */
class Form extends FormStructure
{
    protected $elements;

    public function render($indent = 0)
    {
        $formCode = '';

        foreach ($this->elements as $element){
            $formCode .= $element->render($indent + 1) . PHP_EOL;
        }

        return $formCode;
    }

    public function add(FormStructure $element)
    {
        $this->elements[] = $element;
    }
}

/**
 * 叶子节点
 */
class InputElement extends FormStructure
{
    public function render($indent = 0)
    {
        return str_repeat('  ',$indent). '<input type="text" />';
    }
}

// 测试
$form = new Form();
$form->add(new InputElement());
$form->add(new InputElement());
$secondForm = new Form();
$secondForm->add(new InputElement());
$form->add($secondForm);
var_dump($form->render());

文章作者: 我若为侠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我若为侠 !
 上一篇
23种设计模式-模版方法模式 23种设计模式-模版方法模式
23种设计模式-模版方法模式概述定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下,重定义该算法的某些特定步骤。 结构模版方法模式包含以下主要角色: 抽象类:负责给出一个算法的轮廓和骨架,它由一
下一篇 
23种设计模式-外观模式 23种设计模式-外观模式
23种设计模式-外观模式概述外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口。外部程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序
  目录