メッセージ結合

 このコードは、メッセージ結合の例を示しています。
異なるメッセージ送信方法を提供するクラスが共通のインタフェースを実装し、MessageSenderクラスはこれらのクラスを使ってメッセージを送信します。
これにより、モジュール間の疎結合性が高まり、新しいメッセージ送信方法を追加しやすく、保守性が向上します。

<?php

interface Messenger
{
    public function sendMessage(string $message);
}
                    
<?php

class EmailMessenger implements Messenger
{
    public function sendMessage(string $message)
    {
        // メール送信処理
        echo "Email sent: $message\n";
    }
}
                    
<?php


class SMSService implements Messenger
{
    public function sendMessage(string $message)
    {
        // SMS送信処理
        echo "SMS sent: $message\n";
    }
}
                    
<?php

class MessageSender
{
    private $messenger;

    public function __construct(Messenger $messenger)
    {
        $this->messenger = $messenger;
    }

    public function send($message)
    {
        $this->messenger->sendMessage($message);
    }
}
                    
<?php

$emailMessenger = new EmailMessenger();
$messageSender = new MessageSender($emailMessenger);
$messageSender->send("Hello, this is an email message!");

$smsService = new SMSService();
$messageSender = new MessageSender($smsService);
$messageSender->send("Hello, this is an SMS message!");