Maison >développement back-end >tutoriel php >Découvrez le modèle d'adaptateur en PHP dans un article
Dans l'article précédent " Une brève discussion sur le mode décorateur en PHP " nous avons présenté le mode décorateur en PHP. Cet article vous amènera à comprendre le mode adaptateur en PHP.
Ce modèle a toujours eu un exemplaire très classique, et c'est la prise ! C'est vrai, lorsque nous achetons des appareils électriques à l'étranger ou que nous voyageons à l'étranger pour affaires, nous avons souvent besoin d'un adaptateur secteur, car la norme de tension de notre pays est de 220 volts, alors que d'autres pays ont des normes de 110 volts. Et cet adaptateur secteur est un symbole du mode adaptateur. Lorsque l'objet ne répond pas aux exigences, ajoutez-y un adaptateur ! !
Définition GoF : Convertissez l'interface d'une classe en une autre interface souhaitée par le client. Le modèle Adaptateur permet aux classes qui ne pouvaient pas fonctionner ensemble à l'origine en raison d'interfaces incompatibles de travailler ensemble
Diagramme de classes GoF :
Héritage
Combiné
Implémentation de code
interface Target{ function Request() : void; }
Définir un contrat d'interface, Il peut être également une classe normale avec des méthodes d'implémentation (nous utiliserons des classes dans les exemples suivants)
class Adapter implements Target{ private $adaptee; function __constuct($adaptee){ $this->adaptee = $adaptee; } function Request() : void { $this->adaptee->SpecificRequest(); } }
L'adaptateur implémente ce contrat d'interface afin que la méthode Request() puisse être implémentée, mais veuillez noter que ce que nous appelons en réalité C'est une méthode de la classe Adaptee
class Adaptee { function SpecificRequest() : void{ echo "I'm China Standard!"; } }
Parlons encore de mon usine de téléphones portables. Cette fois, notre activité s'est vraiment développée ! Il a été vendu en Thaïlande, à Singapour et en Indonésie. Quoi qu'il en soit, on le trouve partout où il y a du curry. On dit que nous avons produit une couleur curry. Le changement de coque n'est pas entièrement dû à l'influence de Noé, mais après de longues recherches, nous avons constaté que différentes couleurs se vendent mieux à différents endroits. Par conséquent, Foxconn a installé un adaptateur de pulvérisation (adaptateur) pour nous sur la ligne de production d'étuis de téléphone portable d'origine (Target). Lorsque nous avons besoin d'étuis d'autres couleurs, nous n'avons besoin que de cet adaptateur pour changer différentes peintures (adapté), installez directement ce pulvérisateur, et un nouveau téléphone mobile couleur est né. Lors de l'expansion de notre activité dans un autre pays, il nous suffit de changer la peinture. Si cela prend trop de temps, nous remplacerons également la buse (rappelez-vous l'approvisionnement continu des imprimantes)
Code complet. :Modèle d'adaptateurhttps://github.com/zhangyue0503/designpatterns-php/blob/master/05.adapter/source/adapter.php
Diagramme des classes d'envoi de SMS
Code source complet : méthode d'adaptateur d'envoi de SMShttps : / /github.com/zhangyue0503/designpatterns-php/blob/master/05.adapter/source/adapter-message.php<?php class Message{ public function send(){ echo "阿里云发送短信!" . PHP_EOL; } public function push(){ echo "阿里云发送推送!" . PHP_EOL; } } class JiguangSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->send_out_msg(); } public function push(){ $this->message->push_msg(); } } class JiguangMessage{ public function send_out_msg(){ echo "极光发送短信!" . PHP_EOL; } public function push_msg(){ echo "极光发送推送!" . PHP_EOL; } } class BaiduYunSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->transmission_msg(); } public function push(){ $this->message->transmission_push(); } } class BaiduYunMessage{ public function transmission_msg(){ echo "百度云发送短信!" . PHP_EOL; } public function transmission_push(){ echo "百度云发送推送!" . PHP_EOL; } } $jiguangMessage = new JiguangMessage(); $baiduYunMessage = new BaiduYunMessage(); $message = new Message(); // 原来的老系统发短信,使用阿里云 $message->send(); $message->push(); // 部分模块用极光发吧 $jgAdatper = new JiguangSDKAdapter($jiguangMessage); $jgAdatper->send(); $jgAdatper->push(); // 部分模块用百度云发吧 $bdAatper = new BaiduYunSDKAdapter($baiduYunMessage); $bdAatper->send(); $bdAatper->push();
Description :
Apprentissage recommandé : "Tutoriel vidéo PHP 》
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!