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