PHP
Pattern: Factory method
11.11.2021
62

Pattern: Factory method

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


abstract class Speaker
{
    /** @var Voice */
    abstract public function voice(): Voice;

    /**
     * @param mixed $text
     * @return void
     */
    public function say($text): void
    {
        $this->voice()->pronounce($text);
    }
}

class ManSpeaker extends Speaker
{

    /** @inheritDoc */
    public function voice(): Voice
    {
        return new ManVoice();
    }
}

class FemaleSpeaker extends Speaker
{

    /** @inheritDoc */
    public function voice(): Voice
    {
        return new FemaleVoice();
    }

    /**
     * Override
     *
     * @inheritDoc
     */
    public function say($text): void
    {
        $this->voice()->setAdditionalLogic()->pronounce($text);
    }
}

interface Voice
{

    /**
     * @param string $message
     * @return mixed
     */
    public function pronounce(string $message);
}

class ManVoice implements Voice
{

    /** @inheritDoc */
    public function pronounce(string $message)
    {
        echo 'Man speak: ' . $message;
    }
}

class FemaleVoice implements Voice
{

    /** @inheritDoc */
    public function pronounce(string $message)
    {
        echo 'Female speak: ' . $message;
    }

    /** Additional logic */
    public function setAdditionalLogic()
    {
        // some additional logic
    }
}

$speaker = new ManSpeaker();
$speaker->say('...');
// 
$female = new FemaleSpeaker();
$female->say('...');
Источник: ZetRider
PHP
Pattern: Decorator
01.12.2021
13
Pattern: Decorator

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

Читать →
PHP
Pattern: Strategy
23.11.2021
33
Pattern: Strategy

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

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

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

Читать →