Maison développement back-end tutoriel php PHP设计模式——适配器模式Adapter

PHP设计模式——适配器模式Adapter

Jul 29, 2016 am 09:14 AM
error function public this

  在应用程序中,你也许会使用一个文档的代码库,然而,我们常常要添加新的功能,这些功能要求使用不同的方式使用现有的对象。可能新功能只是需要一个不同的名字,也可能是新功能需要与原有的对象稍有不同的行为。

  针对上述问题,采用适配器模式是个很好的解决方案。使用适配器模式创建另一个对象,这个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();
Copier après la connexion

假如有一天需求改变了,要求将错误记录到一个CSV文件中,CSV的格式要求第一列是数值错误代码,第二列是错误文本。新需求已经给出了实现日志记录的代码,问题是这些代码是根据errorObject的另一个版本编写的,该版本与当前使用的版本不同。新的errorObject类具有另外两个名为getErrorNumber()和getErrorText()的方法,logToCSV类会使用到这两个方法:
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);
	}
}
Copier après la connexion
针对这个问题,我们可以采用下面两种解决方案:

● 创建现有代码库的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();
Copier après la connexion

在需要转化一个对象的接口用于另一个对象时,实现Adapter对象不仅是最佳做法,而且也能减少很多麻烦。

适配器模式一般使用场景:

● 数据库驱动(可查看各框架的驱动部分源码)

● webservices(在多个不同的webservices中,使用适配器)

以上就介绍了PHP设计模式——适配器模式Adapter,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution à l'erreur fatale PHP : appel à la méthode non définie PDO::prepare() dans Solution à l'erreur fatale PHP : appel à la méthode non définie PDO::prepare() dans Jun 22, 2023 pm 06:40 PM

PHP est un langage de développement Web populaire utilisé depuis longtemps. La classe PDO (PHP Data Object) intégrée à PHP est un moyen courant pour nous d'interagir avec la base de données lors du développement d'applications Web. Cependant, un problème que certains développeurs PHP rencontrent souvent est que lorsqu'ils utilisent la classe PDO pour interagir avec la base de données, ils reçoivent une erreur comme celle-ci : PHPFatalerror:CalltoundefinedmethodPDO::prep

Que dois-je faire si « Erreur non interceptée (promise) : échec de la demande avec le code d'état 500 » se produit lors de l'utilisation d'axios dans une application Vue ? Que dois-je faire si « Erreur non interceptée (promise) : échec de la demande avec le code d'état 500 » se produit lors de l'utilisation d'axios dans une application Vue ? Jun 24, 2023 pm 05:33 PM

Il est très courant d'utiliser axios dans les applications Vue. axios est un client HTTP basé sur Promise qui peut être utilisé dans les navigateurs et Node.js. Pendant le processus de développement, le message d'erreur « Uncaught(inpromise)Error : Requestfailedwithstatuscode500 » apparaît parfois pour les développeurs, ce message d'erreur peut être difficile à comprendre et à résoudre. Cet article explorera ceci

Résoudre le problème de « erreur : le type incomplet n'est pas autorisé » dans le code C++ Résoudre le problème de « erreur : le type incomplet n'est pas autorisé » dans le code C++ Aug 26, 2023 pm 08:54 PM

Résolvez le problème « erreur : type incomplet n'est pas autorisé » dans le code C++. Au cours du processus de programmation C++, vous rencontrez parfois des erreurs de compilation. L'une des erreurs courantes est « erreur : type incomplet n'est pas autorisé ». Cette erreur est généralement provoquée par une opération sur un type incomplet. Cet article expliquera la cause de cette erreur et proposera plusieurs solutions. Tout d'abord, je

Résoudre le problème « erreur : initialiseur attendu avant le type de données » dans le code C++ Résoudre le problème « erreur : initialiseur attendu avant le type de données » dans le code C++ Aug 25, 2023 pm 01:24 PM

Résolvez le problème « erreur : initialiseur attendu avant le type de données » dans le code C++. Dans la programmation C++, nous rencontrons parfois des erreurs de compilation lors de l'écriture du code. L'une des erreurs courantes est « erreur : initialiseur attendu avant le type de données ». Cette erreur se produit généralement dans une déclaration de variable ou une définition de fonction et peut empêcher le programme de se compiler correctement ou

0271 : Que dois-je faire si l'ordinateur ne peut pas être allumé en raison d'une erreur d'horloge en temps réel ? 0271 : Que dois-je faire si l'ordinateur ne peut pas être allumé en raison d'une erreur d'horloge en temps réel ? Mar 13, 2023 am 11:30 AM

Solution à « 0271 : erreur d'horloge en temps réel » qui ne peut pas démarrer : 1. Appuyez sur F1 et dans l'interface qui apparaît, déplacez la barre d'options jusqu'au troisième élément « Date/Heure » 2. Modifiez manuellement l'heure du système à l'heure actuelle ; une fois ; 3. Appuyez sur F10 et sélectionnez oui dans la boîte de dialogue contextuelle ; 4. Rouvrez le portable pour démarrer normalement.

Que signifie fonction ? Que signifie fonction ? Aug 04, 2023 am 10:33 AM

Fonction signifie fonction. Il s'agit d'un bloc de code réutilisable avec des fonctions spécifiques. C'est l'un des composants de base d'un programme. Il peut accepter des paramètres d'entrée, effectuer des opérations spécifiques et renvoyer des résultats. code pour améliorer la réutilisabilité et la maintenabilité du code.

Solution à l'erreur fatale PHP : appel à la fonction non définie mysqli_connect() Solution à l'erreur fatale PHP : appel à la fonction non définie mysqli_connect() Jun 23, 2023 am 09:40 AM

Lors de l'écriture d'applications Web à l'aide de PHP, une base de données MySQL est souvent utilisée pour stocker les données. PHP fournit un moyen d'interagir avec la base de données MySQL appelé MySQLi. Cependant, parfois lors de l'utilisation de MySQLi, vous rencontrerez un message d'erreur, comme indiqué ci-dessous : PHPFatalerror:Calltoundefinedfunctionmysqli_connect() Ce message d'erreur signifie que PHP ne peut pas trouver mon

Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type Aug 19, 2023 am 10:44 AM

Comment résoudre PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory Dans le processus d'utilisation du développement PHP, nous rencontrons souvent des problèmes de fonctionnement des fichiers, dont "PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory"

See all articles