以单个对象的方式来对待一组对象有一个接口类,有一个需实现的方法,其他所有类都实现它,在一个组合类的实现方法中循环调用另外其他类的方法
有一个公共的接口类
interface Renderable\n{\n public function render(): string;\n}
组合类,也实现了接口
class Form implements Renderable\n{\n private array $elements;\n public function render(): string\n {\n //组合类里面循环调用其他类的同名方法\n foreach ($this->elements as $element) {\n $element->render();\n }\n }\n public function addElement(Renderable $element)\n {\n $this->elements[] = $element;\n }\n}
子项类,也实现了接口
class InputElement implements Renderable\n{\n public function render(): string\n {\n }\n}\nclass TextElement implements Renderable\n{\n public function render(): string\n {\n }\n}
使用的时候,像使用单一类一样使用组合类
$form = new Form();\n$form->addElement(new TextElement());\n$form->addElement(new InputElement());\n$form->render();