Si vous besoin d'y aller Lorsque vous voyagez et jouez à l'étranger, il existe désormais de nombreux produits électroniques, mais chaque produit électronique a besoin d'une source d'alimentation pour le faire fonctionner, comme les téléphones portables, les ordinateurs et les appareils photo. . . Mais il existe un autre problème très évident : les produits électroniques consomment beaucoup d'énergie. Lorsqu'ils sont hors tension, ils doivent être rechargés. Dans notre pays, les chargeurs fournis avec les produits électroniques que nous achetons sont généralement de 220 V. le monde est très grand, et les exigences (réglementations)
de chaque pays sont différentes Par exemple, les États-Unis sont en 120V
1. Adaptateur de classe
Selon le diagramme UML ci-dessus, nous Je peux voir que, cela nécessite une interface de tension américaine, une classe d'adaptateur UsaInterface
, une interface de tension chinoise Adapter
, un utilisateur Chine
, Computer
Ici, la tension chinoise est l'adaptateur, et les États-Unis la tension est La sortie finale (cible) est le configurateur
interface UsaInterface{ public function outPut5V();}class China{ private $voltage = 220; public function outPut220V() { return $this->voltage; }}class Adapter extends China implements UsaInterface{ public function outPut5V() { // TODO: Implement outPut5V() method. $chinaVoltage = $this->outPut220V(); return $chinaVoltage / 2 + 10 . "V"; }}class Computer{ public function index(UsaInterface $usa) { if ($usa->outPut5V() === "120V") { printf("可以在美国使用中国的电源插头给电脑充电了"); } else { printf("不可以在美国使用中国的电源插头给电脑充电了"); } }}class Client{ public function __construct() { $adapter = new Adapter(); $computer = new Computer(); $computer->index($adapter); }}
2. Modèle d'adaptateur d'objet
L'adaptateur d'objet est en fait un ajustement sur le modèle d'adaptateur de classe. La classe d'adaptateur n'hérite pas de la classe de l'adapté, mais les laisse être combinées ensemble. Cela augmentera la flexibilité d'utilisation Adapter
et n'exposera pas de nombreuses méthodes de l'adapté (en utilisant la relation d'association au lieu de la relation d'héritage [réutilisation de synthèse). principe]). En même temps, sans héritage, il n'y a aucun moyen de remplacer la réécriture des méthodes de la classe parent, ce qui peut être considéré comme une bonne ou une mauvaise chose. Comme suit :
class Adapter implements UsaInterface{ protected $china; public function __construct(China $china) { $this->china = $china; } public function outPut5V() { // TODO: Implement outPut5V() method. $chinaVoltage = $this->china->outPut220V(); return $chinaVoltage / 2 + 10 . "V"; }}
3. Adaptateur d'interface (mode adaptateur par défaut)
Lorsque vous n'avez pas besoin d'implémenter toutes les méthodes fournies par l'interface, vous pouvez d'abord concevoir une classe abstraite pour implémenter l'interface et fournit une implémentation de méthode vide par défaut pour l'interface, puis la modification de la sous-méthode de la classe abstraite peut remplacer sélectivement certaines méthodes de la classe parent pour répondre aux exigences (applicable aux situations où une interface ne veut pas utiliser toutes les méthodes )
Recommandations d'apprentissage associées :
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!