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つになると思います。