Maison  >  Article  >  développement back-end  >  Jetons un coup d'œil au modèle d'adaptateur des modèles de conception PHP

Jetons un coup d'œil au modèle d'adaptateur des modèles de conception PHP

coldplay.xixi
coldplay.xixiavant
2020-06-30 17:42:342806parcourir

Jetons un coup d'œil au modèle d'adaptateur des modèles de conception PHP

Modèle d'adaptateur du modèle de conception PHP

  1. Introduction des problèmes de scénario de vie :

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

    Principe :
Convertir un. type de L'interface est convertie en une autre interface, afin que les classes dont les interfaces d'origine sont incompatibles puissent être compatibles.

L'utilisateur appelle la méthode d'interface cible convertie par l'adaptateur, et l'adaptateur appelle ensuite la méthode d'interface pertinente de la personne adaptée

    Avantages :
L'utilisateur est L'adapté ne peut pas être vu, et c'est une opération découplée

  1. Le modèle d'adaptateur est un modèle de conception structurelle

  2. Trois types de modèles d'adaptateur Méthode de mise en œuvre

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 :

Programmation PHP de l'entrée à la maîtrise

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer