PHP
Pattern: Decorator
01.12.2021
105

Pattern: Decorator

Когда использовать: дополнить, изменить, расширить поведение объекта.


interface Response
{
    /**
     * @return array
     */
    public function data(): array;
}

final class BaseResponse implements Response
{
    /**
     * @var array
     */
    private array $data;

    /**
     * @param array $data
     */
    public function __construct(array $data)
    {
        $this->data = $data;
    }

    /**
     * @inheritDoc
     */
    public function data(): array
    {
        return $this->data;
    }
}

abstract class DecoratorResponse implements Response
{
    /**
     * @var Response
     */
    private Response $response;

    /**
     * @param Response $response
     */
    public function __construct(Response $response)
    {
        $this->response = $response;
    }

    /**
     * @inheritDoc
     */
    public function data(): array
    {
        return $this->response->data();
    }
}

final class AdditinalResponseOne extends DecoratorResponse
{
    /**
     * @inheritDoc
     */
    public function data(): array
    {
        $response = parent::data();
        $response[] = __CLASS__;

        return $response;
    }
}

final class AdditinalResponseTwo extends DecoratorResponse
{
    /**
     * @inheritDoc
     */
    public function data(): array
    {
        $response = parent::data();
        $response[] = __CLASS__;

        return $response;
    }
}


$result = new BaseResponse(['BaseResponse']);
$result = new AdditinalResponseOne($result);
$result = new AdditinalResponseTwo($result);
$result = new AdditinalResponseTwo($result);
print_r($result->data());
// Array
// (
//     [0] => BaseResponse
//     [1] => AdditinalResponseOne
//     [2] => AdditinalResponseTwo
//     [3] => AdditinalResponseTwo
// )
Источник: ZetRider
PHP
Pattern: Strategy
23.11.2021
118
Pattern: Strategy

Когда использовать:  условия контекста могут менять реализацию интерфейса.interface Strategy { /** * @param string $message * @retu...

Читать →
PHP
Pattern: Factory method
11.11.2021
160
Pattern: Factory method

Когда использовать: возможно использование нескольких вариантов для выполнения операции, наследующих родительское поведение, реализующие поставленную...

Читать →
PHP
Pattern: State
16.07.2021
273
Pattern: State

abstract class StateVehicle { protected $vehicle; public function __construct(Vehicle $vehicle) { $this->vehicle = $vehicle;...

Читать →