Szybkie posty

Jeżeli coś jest wartego uwagi a nie jest to materiał na pełnoprawnwgo posta na blogu to będę starać się to umieszczać w tym miejscu.

#ajax #apache #behat #bitbacket #bootstrap #composer #cookies #cqrs #css #css flex #ct8 #curl #docker #doctrine #edukacja #enet #enp sla #filmy #firma #funkcje php #git #google #htaccess #html #inne #javascript #jedzenie #jquery #js/jquery #kawały #krypto #laravel #linux #oop #pdo #php #php wzorce narzędzia #phpmyadmin #phpspec #phpstan #phpstorm #phpunit #podcast #rabbit #redis #seo #soap #sql #symfony #szukanie po stringach w php #twig #virtual host #visual studio code #vue #wamp #windows #wino-nalewki #wyrazenia regularne #wzorce projektowe #xml #xxx #zdjecia #złote myśli
  • Szukasz po tagu: oop
  • Ilość rekordów w bazie: 1

Wzorzec mediator

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

interface Mediator {

    public function send(string $name, string $message): void;
}

class ConcreteMediator implements Mediator {

    private $colleagues = [];

    public function colleagueRegister(Colleague $colleague): void {
        $colleague->registerMediator($this);
        $this->colleagues[$colleague->getName()] = $colleague;
    }

    public function send(string $name, string $message): void {
        $this->colleagues[$name]->getMessage($message);
    }

}

class Colleague {

    private $mediator;
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function registerMediator(Mediator $mediator): void {
        $this->mediator = $mediator;
    }

    public function getName() {
        return $this->name;
    }

    public function send(string $name, string $message): void {
        echo "Przesyłanie wiadomości od " . $this->name . " do " . $name . ": " . $message . '<br>';

        $this->mediator->send($name, $message); /// Rzeczywista komunikacja odbywa się za pośrednictwem mediatora!!!
    }

    public function getMessage(string $message): void {
        echo "Wiadomość odebrana przez " . $this->name . ": " . $message . '<br>';
    }

}

$michael = new Colleague("michael");
$john = new Colleague("john");
$lucy = new Colleague("lucy");


$mediator = new ConcreteMediator();
$mediator->colleagueRegister($michael);
$mediator->colleagueRegister($john);
$mediator->colleagueRegister($lucy);

$lucy->send('john', "Hello world.");

echo '<br>';

$michael->send('lucy', "Witaj!");
echo '<br>';