时间:2021-07-01 10:21:17 帮助过:5人阅读
针对上述问题,采用适配器模式是个很好的解决方案。使用适配器模式创建另一个对象,这个Adapter对象充当了原始应用与新功能之间的中介。适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口。
代码示例:
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类;
● 创建一个Adapter类;
考虑到保持这些公共接口标准性的需求,因此创建一个Adapter对象是最佳的解决方案。
新创建的适配器对象中必须存在现有errorObject的功能性,而且,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();
适配器模式一般使用场景:
● 数据库驱动(可查看各框架的驱动部分源码)
● webservices(在多个不同的webservices中,使用适配器)
以上就介绍了PHP设计模式——适配器模式Adapter,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。