您的位置:58脚本 > php组合模式应用场景 PHP 组合模式

php组合模式应用场景 PHP 组合模式

2023-05-30 10:32 PHP设计模式

php组合模式应用场景 PHP 组合模式

php组合模式应用场景 PHP 组合模式

php组合模式应用场景

目的

以单个对象的方式来对待一组对象

例子

  • form类的实例包含多个子元素,而它也像单个子元素那样响应render()请求,当调用 render() 方法时,它会历遍所有的子元素,调用 render() 方法

UML 图

Alt Composite UML Diagram

代码

Renderable.php

<?php

declare(strict_types=1);

namespace DesignPatternsStructuralComposite;

interface Renderable
{
    public function render(): string;
}

Form.php

<?php

declare(strict_types=1);

namespace DesignPatternsStructuralComposite;


class Form implements Renderable
{
    
    private array $elements;

    
    public function render(): string
    {
        $formCode = "<form>";

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

        return $formCode . "</form>";
    }

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

InputElement.php

<?php

declare(strict_types=1);

namespace DesignPatternsStructuralComposite;

class InputElement implements Renderable
{
    public function render(): string
    {
        return "<input type="text" />";
    }
}

TextElement.php

<?php

declare(strict_types=1);

namespace DesignPatternsStructuralComposite;

class TextElement implements Renderable
{
    public function __construct(private string $text)
    {
    }

    public function render(): string
    {
        return $this->text;
    }
}

测试

Tests/CompositeTest.php

<?php

declare(strict_types=1);

namespace DesignPatternsStructuralCompositeTests;

use DesignPatternsStructuralCompositeForm;
use DesignPatternsStructuralCompositeTextElement;
use DesignPatternsStructuralCompositeInputElement;
use PHPUnitFrameworkTestCase;

class CompositeTest extends TestCase
{
    public function testRender()
    {
        $form = new Form();
        $form->addElement(new TextElement("Email:"));
        $form->addElement(new InputElement());
        $embed = new Form();
        $embed->addElement(new TextElement("Password:"));
        $embed->addElement(new InputElement());
        $form->addElement($embed);

        // This is just an example, in a real world scenario it is important to remember that web browsers do not
        // currently support nested forms

        $this->assertSame(
            "<form>Email:<input type="text" /><form>Password:<input type="text" /></form></form>",
            $form->render()
        );
    }
}



阅读全文
以上是58脚本为你收集整理的php组合模式应用场景 PHP 组合模式全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS