Maison > développement back-end > tutoriel php > Découvrez le modèle de façade en PHP dans un article

Découvrez le modèle de façade en PHP dans un article

青灯夜游
Libérer: 2023-04-10 11:46:01
avant
3885 Les gens l'ont consulté

Dans l'article précédent "Une brève présentation du mode pont en PHP", nous avons présenté le mode pont en PHP. Cet article vous amènera à comprendre le mode façade dans le modèle de conception PHP.

Découvrez le modèle de façade en PHP dans un article

Mode façade, également appelé mode apparence. Qu'il s'agisse de la façade ou de l'apparence, c'est notre support vers le monde extérieur, tout comme notre visage. Par conséquent, la plus grande caractéristique de ce modèle est d’être « beau ». Comment le dire ? Un tas d'appels d'objets complexes me rendent confus, en particulier lors de la mise à niveau et de la maintenance d'anciens systèmes. Utilisez la façade pour encapsuler les appels de fonction de l'ancien système. De l'extérieur, elle ressemble au nouveau système. C'est le but du motif de façade !

Diagramme de classe Gof et explication

Définition GoF : fournit une interface cohérente pour un ensemble d'interfaces dans un sous-système. Le modèle Facade définit une interface de haut niveau, ce qui rend ce sous-système plus facile à utiliser.

Diagramme de classes GoF

Découvrez le modèle de façade en PHP dans un article

Implémentation du code

class SubSystemOne
{
    public function MethodOne()
    {
        echo '子系统方法一', PHP_EOL;
    }
}
class SubSystemTwo
{
    public function MethodTwo()
    {
        echo '子系统方法二', PHP_EOL;
    }
}
class SubSystemThree
{
    public function MethodThree()
    {
        echo '子系统方法三', PHP_EOL;
    }
}
class SubSystemFour
{
    public function MethodFour()
    {
        echo '子系统方法四', PHP_EOL;
    }
}
Copier après la connexion

Définir quatre ou N sous-systèmes supplémentaires Il n'y a rien à dire à ce sujet. Vous pouvez imaginer qu'il existe de nombreux sous-systèmes, et ils ne le sont pas nécessairement. Aussi semblables que soient ces quatre sous-systèmes, ils peuvent être très différents.

class Facade
{

    private $subStytemOne;
    private $subStytemTwo;
    private $subStytemThree;
    private $subStytemFour;
    public function __construct()
    {
        $this->subSystemOne = new SubSystemOne();
        $this->subSystemTwo = new SubSystemTwo();
        $this->subSystemThree = new SubSystemThree();
        $this->subSystemFour = new SubSystemFour();
    }

    public function MethodA()
    {
        $this->subSystemOne->MethodOne();
        $this->subSystemTwo->MethodTwo();
    }
    public function MethodB()
    {
        $this->subSystemOne->MethodOne();
        $this->subSystemTwo->MethodTwo();
        $this->subSystemThree->MethodThree();
        $this->subSystemFour->MethodFour();
    }
}
Copier après la connexion

Ces sous-systèmes sont regroupés via la classe façade, et seules les méthodes de façade nouvellement définies sont fournies au monde extérieur.

$facade = new Facade();
$facade->MethodA();
$facade->MethodB();
Copier après la connexion

Appeler le client est très simple. Nous n'avons pas besoin de savoir quels sous-systèmes sont spécifiquement appelés, nous avons seulement besoin de savoir ce que font ces méthodes sur la façade !

  • Le mode façade est si simple, et tant que vous êtes un véritable ami qui a fait du développement dans le projet, vous devez avoir utilisé ce mode sans le savoir
  • Quand vous devez fournir un simple pour un sous-système complexe Quand En ce qui concerne les interfaces, le motif de la façade est très adapté. Dans le même temps, s'il existe une grande dépendance entre le programme client et la partie implémentation de la classe abstraite, le modèle de façade peut également être introduit pour le découplage afin d'améliorer l'indépendance et la maintenabilité du sous-système. De plus, lorsque vous devez construire un sous-système hiérarchique, la façade peut servir de point d'entrée pour chaque couche du sous-système, je pense que toute personne ayant utilisé le framework doit avoir utilisé le système de façade dans Laravel, tel que : Cache : . mettre(). Dans Laravel, la façade est implémentée à l'aide d'une méthode magique __callStatic(). Laissez ensuite les méthodes de l’objet être appelées directement à l’aide de méthodes statiques. N'est-ce pas incroyable ? Les amis intéressés peuvent consulter le code source, qui se trouve dans /Illuminate/Support/Facades/Facade.php.
  • Point clé : La structure à trois couches ou MVC est également une manifestation du motif de la façade. Comme mentionné ci-dessus, le mode façade est adapté à la maintenance de sous-systèmes hiérarchiques. La structure à trois niveaux, MVC, MVP et MVVM, est essentiellement destinée à la superposition, et le but de la superposition est de réduire la complexité du système.
Vendre nos téléphones mobiles ne suffit pas. Être une entreprise d'électroménager de haute technologie comme X Mi est notre objectif ultime. Cependant, nous ne pouvons pas produire autant d'appareils électroménagers, nous avons donc décidé de construire un centre commercial (Façade) pour permettre à des commerçants de très haute qualité de rejoindre notre camp et de mettre leurs produits (Sous-Système) dans le centre commercial pour les vendre ensemble. Bien entendu, ces produits ont été soigneusement sélectionnés par nos soins, et ils sont définitivement les meilleurs parmi les meilleurs ! !

Code complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade.php

Exemple

Cette fois, nous enverrons le message texte à La dimension de l'envoi est packagée, et les interfaces des différents opérateurs SMS et push sont packagées. Lors de l'envoi, il vous suffit d'utiliser la classe d'envoi pour contrôler l'envoi de SMS ou de push à l'aide de différents services tiers. quand on y pense. Du drap de laine !

Diagramme des classes d'envoi de SMS

Découvrez le modèle de façade en PHP dans un article

Code source complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade-push.php

<?php

class Send
{

    private $aliYunService;
    private $jiGuangService;

    private $message;
    private $push;

    public function __construct()
    {
        $this->aliYunService = new AliYunService();
        $this->jiGuangService = new JiGuangService();

        $this->message = new MessageInfo();
        $this->push = new PushInfo();
    }

    public function PushAndSendAliYun()
    {
        $this->message->Send($this->aliYunService);
        $this->push->Push($this->aliYunService);
    }

    public function PushAndSendJiGuang()
    {
        $this->message->Send($this->jiGuangService);
        $this->push->Push($this->jiGuangService);
    }
}

class MessageInfo
{
    public function Send($service)
    {
        $service->Send();
    }
}

class PushInfo
{
    public function Push($service)
    {
        $service->Push();
    }
}

class AliYunService
{
    public function Send()
    {
        echo &#39;发送阿里云短信!&#39;, PHP_EOL;
    }
    public function Push()
    {
        echo &#39;推送阿里云通知!&#39;, PHP_EOL;
    }
}

class JiGuangService
{
    public function Send()
    {
        echo &#39;发送极光短信!&#39;, PHP_EOL;
    }
    public function Push()
    {
        echo &#39;推送极光通知!&#39;, PHP_EOL;
    }
}

$send = new Send();
$send->PushAndSendAliYun();
$send->PushAndSendJiGuang();
Copier après la connexion
Instructions

Toujours la recette familière et le goût familier. Ici, vous pouvez imaginer que nos classes de services tiers sont toutes des interfaces plus anciennes, ou qu'elles sont déjà des interfaces très complexes. À l'heure actuelle, l'utilisation du modèle d'apparence peut coopérer avec le nouveau système et réduire la complexité. Cependant, il convient de noter que la classe d'apparence elle-même peut devenir une source de complexité. Heureusement, nous pouvons suivre le principe de responsabilité unique. catégorie d'apparence, faites juste une chose
  • Adresse originale : https://juejin.cn/post/6844903988085653518
Auteur : Hardcore Project Manager

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!

Étiquettes associées:
source:juejin.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal