アプリケーションでは、文書化されたコード ベースを使用している可能性がありますが、多くの場合、既存の オブジェクト をさまざまな方法で使用する必要がある新しい機能を追加する必要があります。おそらく、新機能には別の名前が必要なだけかもしれません。あるいは、新機能には元の オブジェクト とはわずかに異なる動作が必要である可能性があります。
上記の問題を解決するには、アダプター モードを使用するのが良い解決策です。アダプター パターンを使用して、別の オブジェクト を作成します。このアダプターオブジェクト は、元のアプリケーションと新しい機能の間の仲介者として機能します。アダプター デザイン パターン は、特定の オブジェクト のインターフェースを、別の オブジェクト が期待するインターフェースに単純に適合させます。
コード例:
class errorObject{ private $_error; public function __construct($error){ $this->_error = $error; } public function getError(){ return $this->_error; } } class logToConsole{ private $_errorObject; public function __construct($errorObject){ $this->_errorObject = $errorObject; } public function write(){ fwrite(STDERR, $this->_errorObject->getError()); } } $error = new errorObject("404:Not Found"); $log = new logToConsole($error); $log->write();
class logToCSV{ const CSV_LOCATION = "log.csv"; private $_errorObject; public function __construct($errorObject){ $this->_errorObject = $errorObject; } public function write(){ $line = $this->_errorObject->getErrorNumber(); $line .= ','; $line .= $this->_errorObject->getErrorText(); $line .= '\n'; file_put_contents(self::CSV_LOCATION, $line, FILE_APPEND); } }
● 既存のコード ベースの errorObject クラスを作成します。
● アダプター クラスを作成します。
これらのパブリック インターフェイスの標準化を維持する必要性を考慮すると、アダプター オブジェクト を作成することが最善の解決策です。
既存の errorObject の機能が新しく作成されたアダプター object に存在する必要があり、getErrorNumber() メソッドと getErrorText() メソッドが有効である必要があります。
class logToCSVAdapter extends errorObject{ private $_errorNumber, $_errorText; public function __construct($error){ parent::__construct($error); $parts = explode(':', $this->getError()); $this->_errorNumber = $parts[0]; $this->_errorText = $parts[1]; } public function getErrorNumber(){ return $this->_errorNumber; } public function getErrorText(){ return $this->_errorText; } } $error = new logToCSVAdapter("404:Not Found"); $log = new logToCSV($error); $log->write();
アダプター モードの一般的な使用シナリオ:
● データベース ドライバー (各フレームワークのドライバー ソース コードを表示できます)
● Web サービス (複数の異なる Web サービスでアダプターを使用します)
上記は、PHP の設計パターン - アダプター パターンを、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。