PHPでデザインパターン (Adapter)
PHP デザインパターン
Published: 2018-10-20

Adapter パターンとは

  • 「すでに提供されているもの」と「必要なもの」の間の「ずれ」を埋めるようなデザインパターン
  • Adapter パターンは、既存のクラスにはまったく手を加えずに、目的のインターフェース(API)にあわせようとするものです。

Adapter パターンには下記の2種類があります

  • クラスによる Adapter パターン (継承を使ったもの)
  • インスタンスによる Adapter パターン (委譲を使ったもの)

実装例

<?php

class ShowFile
{
    private $filename;

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

    public function showPlain()
    {
        echo file_get_contents($this->filename);
    }

    public function showHighlight()
    {
        highlight_file($this->filename);
    }
}

interface DisplaySourceFile
{
    public function display();
}

// $filepath = __FILE__;
// $show_file = new ShowFile($filepath);
// $show_file->showPlain();
// echo "------\n";
// $show_file->showHighlight();

// 継承を使ったパターン
class DisplaySourceFileImpl extends ShowFile implements DisplaySourceFile
{
    public function __construct($filename)
    {
        parent::__construct($filename);
    }

    public function display()
    {
        parent::showHighlight();
    }
}

$show_file = new DisplaySourceFileImpl(__FILE__);
$show_file->display();

// 委譲を使ったパターン
class DisplaySourceFileImpl2 implements DisplaySourceFile
{
    private $show_file;

    public function __construct($filename)
    {
        $this->show_file = new ShowFile($filename);
    }

    public function display()
    {
        $this->show_file->showHighlight();
    }
}

$show_file = new DisplaySourceFileImpl2(__FILE__);
$show_file->display();

所感

既存のクラスに変更を加えたくない時や、既存のクラスを変更できない場合の選択肢の1つになると思います。

参考