/** * @author v.r And * * @example * 适配器 * 适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口 * 列子: * 以日志管理为例子 * * @copyright copyright information * */class errorObject{ private $error; public function __construct($error) { $this->error = $error; } public function getError() { return $this->error; }}/** * * @example * 输出日志到控制台 * */class logToConsole { private $errorObject; public function __construct($errorObject) { $this->errorObject = $errorObject; } /** * write() 方法中就随便你操作了,显示到控制器中 */ public function write() { echo "I write To Console : ".$this->errorObject->getError(); }}$error = new errorObject("404 Not Found");$log = new logToConsole($error);$log->write();echo "--------------------------------------------------------\n";/*** @example* 输出到CSV中*/class logToCSV { const CSV_LOCATION = 'log.csv'; private $errorObject; public function __construct($errorObject) { $this->errorObject = $errorObject; } /** * write() 方法中 * 调用 errorObject类中 * getErrorNumber 方法 * getErrorText 方法 * 问题: errorObject中类中并没有此方法 */ public function write() { echo "I write To CSV : \n"; echo "errorNumber : " . $this->errorObject->getErrorNumber() ."\n"; echo "errorText : " . $this->errorObject->getErrorText()."\n"; }}/** * @example * 适配器 */class logToCSVAdapter extends errorObject{ private $errorNo; private $errorMsg; public function __construct($error) { parent :: __construct($error); $parts = explode(':', $this->getError()); $this->errorNo = $parts[0]; $this->errorMsg =$parts[1]; } public function getErrorNumber() { return $this->errorNo; } public function getErrorText() { return $this->errorMsg; }}$error = new logToCSVAdapter("404 : Not Found");$log = new logToCSV($error);$log->write();echo "--------------------------------------------------------\n";