PHPで学ぶデザインパターン - Mediatorパターン

アプリケーション

概要

PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。

Mediatorパターンとは

仲介者・調停者の意味。

オブジェクトの振る舞いに関するデザインパターンで、オブジェクト間のやりとり調整するためのパターン。

オブジェクト同士のやり取りが複雑化し、関係性が見えにくくなるような時に有用かもしれない。

実装

<?php

// Mediator
class Receptionist
{
    public function checkIn(User $user, $message) // 振る舞いの操作を任せたいオブジェクトを保持
    {
        echo $message . ' ' . $user->getName();
    }
}

class User
{
    private $name;
    private $receptionist;

    public function __construct($name, Receptionist $receptionist) // Mediatorを持つ
    {
        $this->name = $name;
        $this->receptionist = $receptionist;
    }

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

    public function checkIn($message)
    {
        $this->receptionist->checkIn($this, $message); // $this!!
    }
}

$receptionist = new Receptionist();


$john = new User('John', $receptionist);
$bob = new User('Bob', $receptionist);

$john->checkIn('Welcome!'); // Welcome! John
$bob->checkIn('Hi!'); // Hi! Bob

所感

クラス間のやりとりが複雑化しそうなときにオブジェクトの振る舞いをまとめて管理したいときに思い出したいパターン。

参考