Maison développement back-end tutoriel php Qu'est-ce que le mode adaptateur ?

Qu'est-ce que le mode adaptateur ?

Apr 16, 2019 am 09:51 AM
适配器模式

Modèle d'adaptateur (Modèle d'adaptateur)

Le modèle d'adaptateur est également appelé modèle d'adaptateur. C'est l'un des modèles structurels qui peuvent être modifiés via l'adaptateur. formulaire d'interface de modèle (ou de classe externe).

Scénarios d'application de modèles d'adaptateur

Dans le processus de développement de systèmes à grande échelle, nous rencontrons souvent des situations telles que les suivantes :

Nous devons implémenter quelque chose Ces fonctions ont déjà un ou plusieurs composants externes qui ne sont pas encore matures. Si nous redéveloppons ces fonctions nous-mêmes, cela prendra beaucoup de temps, donc dans de nombreux cas, nous choisirons d'utiliser des composants externes temporairement et envisagerons ensuite de les remplacer. eux à tout moment plus tard. Mais cela entraînera un problème. Avec le remplacement de la bibliothèque de composants externes, il peut être nécessaire d'apporter des modifications importantes au code source qui fait référence au composant externe, il est donc très probable que de nouveaux problèmes soient introduits, etc. Comment minimiser la zone de modification ? Le modèle Adapter a été proposé pour ce besoin similaire. Le modèle Adapter appelle de manière transparente des composants externes en définissant une nouvelle interface (qui résume les fonctions à implémenter) et une classe Adapter qui implémente l'interface. De cette façon, lors du remplacement de composants externes, il vous suffit de modifier au maximum quelques classes d'adaptateur, et les autres codes sources ne seront pas affectés.

instance php

Supposons que nous ayons une classe d'articles qui a complété la liste des articles et l'affichage des informations détaillées :

<?php
class article{
//文章列表获取方法
public function getLIst(){
echo '获取文章列表';
}
//根据文章id获取文章的标题和内容
public function getInfo($id){
echo '根据文章id获取文章的标题和内容';
}
}
$art = new article();
$art->getInfo(1);
Copier après la connexion

En raison de projet Oui, une telle fonction est maintenant nécessaire. Lors de l'obtention des détails de l'article, vous devez également obtenir l'heure de création de l'article et mettre à jour le nombre de fois que l'article a été lu.

Si nous n'utilisons pas le mode adaptateur, notre première pensée est de modifier le code source de la classe article pour ajouter une telle fonction. La raison pour laquelle je pense que c'est parce que l'exemple de code ci-dessus est très simple. Et s'il s'agissait de milliers de lignes ? Et si le code getInfo() est très complexe ?

Utilisez le modèle d'adaptateur pour résoudre tout cela !

class articleAdapter{
public $_artObj;
public function __construct($artObj){
$this->_artObj = $artObj;
}
public function getInfo($id){
$this->_artObj->getInfo($id);
}
public function getInfoAndUpdate($id){
//利用$this->_artObj查询符合要求的文章数据并更新浏览次数
echo '$this->_artObj查询符合要求的文章数据并更新浏览次数';
}
}
$art = new articleAdapter(new article());
$art->getInfo(12);
$art->getInfoAndUpdate(12);
Copier après la connexion

Pourquoi ne pas utiliser l'héritage ?

Adaptateur d'objet : il n'est pas traité par héritage, mais par combinaison d'objets. Tant que nous avons étudié les principes de conception OO, nous savons que la combinaison est la méthode recommandée par rapport à l'héritage.

Adaptateur de classe : implémenté par héritage, encapsulant les méthodes de l'ancien système. Dans le processus de conversion des adaptateurs d'objets entre adaptateurs, les adaptateurs de classe peuvent sans aucun doute être complétés, mais les dépendances augmenteront et, avec la flexibilité des exigences d'adaptation, l'expansion peut devenir difficile à contrôler par héritage.

De manière générale, les adaptateurs de classe sont moins flexibles, tandis que les adaptateurs d'objets sont plus flexibles. C'est la méthode recommandée. Cela peut être effectué via l'injection de dépendances ou la configuration. L'adaptateur de classe doit hériter de la classe de l'ancien système pour être adapté, ce qui n'est sans doute pas une bonne idée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

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)

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) 11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) Mar 03, 2025 am 10:49 AM

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Travailler avec les données de session Flash dans Laravel

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Misque de réponse HTTP simplifié dans les tests Laravel

Construisez une application React avec un Laravel Back End: Partie 2, React Construisez une application React avec un Laravel Back End: Partie 2, React Mar 04, 2025 am 09:33 AM

Construisez une application React avec un Laravel Back End: Partie 2, React

Introduction à l'API Instagram Introduction à l'API Instagram Mar 02, 2025 am 09:32 AM

Introduction à l'API Instagram

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

12 meilleurs scripts de chat PHP sur Codecanyon

Notifications à Laravel Notifications à Laravel Mar 04, 2025 am 09:22 AM

Notifications à Laravel

See all articles