Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Entwurfsmuster – Adaptermuster Adapter

PHP-Entwurfsmuster – Adaptermuster Adapter

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-29 09:14:501019Durchsuche

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();

Wenn sich eines Tages die Anforderungen ändern, ist es erforderlich, Fehler in einer CSV-Datei aufzuzeichnen. Das Format von CSV erfordert, dass die erste Spalte ein numerischer Fehlercode ist , und die zweite Spalte ist der Fehlertext. Die neue Anforderung hat Code bereitgestellt, der die Protokollierung implementiert. Das Problem besteht darin, dass der Code auf einer anderen Version von errorObject basiert, die sich von der derzeit verwendeten unterscheidet. Die neue errorObject-Klasse verfügt über zwei weitere Methoden namens getErrorNumber() und getErrorText(), die von der logToCSV-Klasse verwendet werden:
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
Objekts in ein anderes Objekt konvertieren müssen, ist die Implementierung von AdapterObjekt nicht nur eine bewährte Vorgehensweise Und es kann auch eine Menge Ärger reduzieren. Allgemeine Nutzungsszenarien des Adaptermodus:

● Datenbanktreiber (Sie können den Treiberquellcode jedes Frameworks anzeigen)


● Webservices (Verwenden Sie Adapter in mehreren verschiedenen Webservices)


Das Obige stellt das PHP-Entwurfsmuster vor - Adaptermuster, einschließlich des relevanten Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn