PHP

PHP Adapterパターン [PHPによるデザインパターン入門]

PHP

絶版されているけれど、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/

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)