Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Entwurfsmuster – Adaptermuster Adapter
In Ihrer Anwendung können Sie eine dokumentierte Codebasis verwenden. Wir fügen jedoch häufig neue Funktionen hinzu, die die Verwendung vorhandener Objekte auf unterschiedliche Weise erfordern. Vielleicht braucht die neue Funktion einfach einen anderen Namen, oder vielleicht benötigt die neue Funktion ein etwas anderes Verhalten als das ursprüngliche Objekt.
Um die oben genannten Probleme zu lösen, ist die Verwendung des Adaptermodus eine gute Lösung. Verwenden Sie das Adaptermuster, um ein weiteres Objekt zu erstellen. Dieses AdapterObjekt fungiert als Vermittler zwischen der ursprünglichen Anwendung und der neuen Funktionalität. Das Adapter--Entwurfsmuster passt einfach die Schnittstelle eines -Objekts an die Schnittstelle an, die von einem anderen -Objekt erwartet wird.
Codebeispiel:
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); } }Um dieses Problem anzugehen, können wir die folgenden zwei Lösungen anwenden:
● Erstellen Sie die errorObject-Klasse der vorhandenen Codebasis.
● Erstellen Sie eine Adapterklasse.
Unter Berücksichtigung der Notwendigkeit, die Standardisierung dieser öffentlichen Schnittstellen aufrechtzuerhalten, erstellen Sie einen Adapter Objekt ist die beste Lösung.
Die Funktionalität des vorhandenen errorObject muss im neu erstellten Adapter--Objekt vorhanden sein und die Methoden getErrorNumber() und getErrorText() müssen gültig sein.
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();Wenn Sie die Schnittstelle eines