
絶版されているけれど、Google booksで公開されているのが見れます。
https://books.google.co.jp/books?id=sXNh4TeQeBIC&printsec=frontcover&hl=ja#v=onepage&q&f=false
1日1パターンってことで演習してアウトプットしていきます。
もくじ
使いどころ
- 十分に実績のあるクラスを変更せずにAPIとして利用したい場合
実装のポイント
- 十分実績のあるクラスを利用する為に、Adapterとなるクラスを作成する。クライアントはインターフェイスを通してAdapterにアクセスして、Adapterは十分実績のあるクラスを継承する
Adapterのメリット
- クライアントはインターフェイスとだけアクセスする、内部の実装を意識しなくて良い
index.php
<?php
require_once 'DisplaySourceFileImpl.class.php';
/**
* DisplaySourceFileImplクラスをインスタンス化する
* 内容を表示するファイルは、[ShowFile.class.php]
*/
$show_file = new DisplaySourceFileImpl('./ShowFile.class.php');
/**
* プレーンテキストとハイライトしたファイル内容をそれぞれ表示する
*/
$show_file->display();
DisplaySourceFile.class.php
<?php
interface DisplaySourceFile
{
/**
* 指定されたソースファイルをハイライト表示する
*/
public function display();
}
DisplaySourceFileImpl.class.php
<?php
require_once 'DisplaySourceFile.class.php';
require_once 'ShowFile.class.php';
/**
* DisplaySourceFileを実装したクラス
*/
class DisplaySourceFileImpl extends ShowFile implements DisplaySourceFile
{
/**
* コンストラクタ
*/
public function __construct($filename)
{
parent::__construct($filename);
}
/**
* 指定されたソースファイルをハイライト表示する
*/
public function display()
{
parent::showHighlight();
}
}
ShowFile.class.php
<?php
/**
* 指定されたファイルの内容を表示するクラス
*/
class ShowFile
{
/**
* 指定されたファイルの内容を表示するクラス
*
* @access private
*/
private $filename;
/**
* コンストラクタ
*
* @param sring ファイル名
* @throws Exception
*/
public function __construct($filename)
{
if(!is_readable($filename))
{
throw new Exception('file "' . $filename . '" is not readable!');
}
$this->filename = $filename;
}
/**
* プレーンテキストとして表示する
*/
public function showPlain()
{
echo '<pre>';
echo htmlspecialchars(file_get_contents($this->filename), ENT_QUOTES);
echo '</pre>';
}
/**
* キーワードをハイライトで表示する
*/
public function showHighlight()
{
highlight_file($this->filename);
}
}
/demo/Design-Pattern-Primer-by-PHP/Adapter/
![PHP Template Methodパターン [PHPによるデザインパターン入門]](https://www.yuulinux.tokyo/contents/wp-content/uploads/2017/09/phpDP_20190407_1-150x150.jpg)
