PHP
Pattern: Strategy
23.11.2021
33

Pattern: Strategy

Когда использовать:  условия контекста могут менять реализацию интерфейса.


interface Strategy
{
    /**
     * @param string $message
     * @return mixed
     */
    public function say(string $message);
}

class StrategyFirst implements Strategy
{
    /**
     * @inheritDoc
     */
    public function say(string $message) {
        echo __CLASS__ . ' say: ' . $message;
    }
}

class StrategySecond implements Strategy
{
    /**
     * @inheritDoc
     */
    public function say(string $message) {
        echo __CLASS__ . ' say: ' . $message;
    }
}

final class Client
{
    /** @var string */
    private string $message;

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

    /**
     * @return Strategy
     */
    private function strategy(): Strategy
    {
        if (strlen($this->message) < 5) {
            return new StrategyFirst();
        } else {
            return new StrategySecond();
        }
    }

    /**
     * @return void
     */
    public function say(): void
    {
        $this->strategy()->say($this->message);
    }
}

(new Client('Hi'))->say();
(new Client('Hi 12345'))->say();
Источник: ZetRider
PHP
Pattern: Decorator
01.12.2021
13
Pattern: Decorator

Когда использовать: дополнить, изменить, расширить поведение объекта.interface Response { /** * @return array */ public function dat...

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

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

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

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

Читать →