File tree Expand file tree Collapse file tree 6 files changed +111
-0
lines changed Expand file tree Collapse file tree 6 files changed +111
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments