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());