PHP7でデザインパターン入門2/23 Adapterパターン

Adapter パターンとは

インターフェースが異なっている2つの間に入り、そのずれを埋めるためのパターン。既存のクラスに対して修正を加えることなく、インタフェースを変更することができる。

Adapter パターン - Wikipedia

example

Bannerクラス

<?php
class Banner
{
    private $string;

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

    public function showWithParen() {
        echo "(" . $this->string . ")" . PHP_EOL;
    }

    public function showWithAster() {
        echo "*" . $this->string . "*" . PHP_EOL;
    }
}

PrintInterface

<?php
interface PrintInterface
{
    public function printWeak();
    public function printStrong();
}

PrintBannerクラス

<?php
class PrintBanner extends Banner implements PrintInterface {
    public function printWeak() {
        $this->showWithParen();
    }
    public function printStrong() {
        $this->showWithAster();
    }
}

main

<?php
$p = new PrintBanner("Hello");
$p->printWeak();
$p->printStrong();

実行結果

(Hello)
*Hello*

役割

  • Target: PrintInterface
  • Client: main
  • Adaptee: Bannerクラス
  • Adapter: PrintBannerクラス

まとめ

実際に役立つ場面としては、バージョンアップ(互換性)が挙げられる。 古い版と新しい版とを共存させて、メンテナンスを楽に行うためにAdapterパターンが役立つことがある。

関連パターン

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門