Skip to content

Commit bd59725

Browse files
committed
add mediator classes
1 parent 270a6a1 commit bd59725

File tree

6 files changed

+111
-0
lines changed

6 files changed

+111
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\Mediator;
6+
7+
interface AirTrafficControl
8+
{
9+
public function addAirplane(Airplane $airplane): void;
10+
11+
public function notifyAirplane(Airplane $airplane, string $message): void;
12+
}

src/Behavioral/Mediator/Airbus.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\Mediator;
6+
7+
class Airbus extends Airplane
8+
{
9+
public function sendMessage(string $message): void
10+
{
11+
parent::$airTrafficControl->notifyAirplane($this, $message);
12+
}
13+
14+
public function receiveMessage(string $message): void
15+
{
16+
printf('Airbus received message: %s', $message);
17+
}
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\Mediator;
6+
7+
abstract class Airplane
8+
{
9+
protected AirTrafficControl $airTrafficControl;
10+
11+
public function __construct(AirTrafficControl $airTrafficControl)
12+
{
13+
$this->airTrafficControl = $airTrafficControl;
14+
}
15+
16+
abstract public function sendMessage(string $message): void;
17+
18+
abstract public function receiveMessage(string $message): void;
19+
}

src/Behavioral/Mediator/Boing.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\Mediator;
6+
7+
class Boing extends Airplane
8+
{
9+
public function sendMessage(string $message): void
10+
{
11+
parent::$airTrafficControl->notifyAirplane($this, $message);
12+
}
13+
14+
public function receiveMessage(string $message): void
15+
{
16+
printf('Boing received message: %s', $message);
17+
}
18+
}

src/Behavioral/Mediator/Cessna.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\Mediator;
6+
7+
class Cessna extends Airplane
8+
{
9+
public function sendMessage(string $message): void
10+
{
11+
parent::$airTrafficControl->notifyAirplane($this, $message);
12+
}
13+
14+
public function receiveMessage(string $message): void
15+
{
16+
printf('Cessna received message: %s', $message);
17+
}
18+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\Mediator;
6+
7+
use SplObjectStorage;
8+
9+
final class GRUAirTrafficControl implements AirTrafficControl
10+
{
11+
private SplObjectStorage $airplane;
12+
13+
public function addAirplane(Airplane $airplane): void
14+
{
15+
$this->airplane->attach($airplane);
16+
}
17+
18+
public function notifyAirplane(Airplane $airplaneReceiver, string $message): void
19+
{
20+
foreach ($this->airplane as $airplane) {
21+
if ($airplaneReceiver !== $airplane) {
22+
$airplaneReceiver->receiveMessage($message);
23+
}
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)