Modèle de conception PHP : expérience d'apprentissage en mode pont (avec code de cas)

齐天大圣
Libérer: 2023-04-09 12:20:02
original
2035 Les gens l'ont consulté

Supposons que vous ayez une classe de forme (Shape), qui étend actuellement deux sous-classes, la classe cercle et la classe carré. Le pseudo-code est le suivant :

interface Shape
{
    function fill ();
}

class circleShage implements Shape
{
    public function fill ()
    {
        echo '圆形' . PHP_EOL;
    }
}

class SquareShape implements Shape
{
    public function fill ()
    {
        echo '正方形' . PHP_EOL;
    }
}
Copier après la connexion

Vous souhaitez maintenant ajouter des couleurs à la forme - rouge, bleu. Alors, que devez-vous faire ? Si vous utilisez l'idée d'héritage, alors vous devez écrire quatre classes, comme suit :

class RedCircleShage implements Shape
{
    public function fill ()
    {
        echo '红色圆形' . PHP_EOL;
    }
}

class RedSquareShape implements Shape
{
    public function fill ()
    {
        echo '红色正方形' . PHP_EOL;
    }
}

class BlueCircleShage implements Shape
{
    public function fill ()
    {
        echo '蓝色圆形' . PHP_EOL;
    }
}

class BlueSquareShape implements Shape
{
    public function fill ()
    {
        echo '蓝色正方形' . PHP_EOL;
    }
}
Copier après la connexion

Mais maintenant, si je veux ajouter une nouvelle forme - un triangle, un nouvelle couleur - Noir ainsi que blanc. Ensuite, nous avons besoin de 12 sous-classes (explosion de classes), alors existe-t-il un bon moyen de le résoudre ?

Synthèse (combinaison) et agrégation

Avant de résoudre les problèmes ci-dessus, nous voulons comprendre le sens de la synthèse et de l’agrégation.

Principe de composition et d'agrégation : essayez d'utiliser la composition/agrégation et essayez de ne pas utiliser l'héritage.

Synthèse (combinaison) : Indique une relation (relation forte) entre un tout et une partie. Ils ont le même cycle de vie, comme par exemple la relation entre une personne et le cœur. partie d'une personne.

Agrégation : Représente une relation entre le tout et les parties (relation faible), indiquant que l'objet A peut contenir l'objet B, mais que l'objet B ne fait pas partie de l'objet A. Par exemple, nous avons parlé de forme et de couleur ci-dessus. La forme peut contenir de la couleur, mais la couleur ne fait pas partie de la forme.

Le mode pont utilise l'agrégation pour découpler le système.

Mode pont

Définition : Séparez la partie abstraite de son implémentation afin qu'elles puissent changer indépendamment

Ci-dessus La définition est difficile à comprendre. En utilisant notre exemple ci-dessus, un système peut avoir plusieurs classifications d'angles (couleur, forme), et chaque classification peut changer (de nouvelles formes et couleurs sont ajoutées), nous pouvons alors utiliser Séparer la mise en œuvre du système de plusieurs perspectives et réduire le couplage entre elles.

Alors comment y parvenir ? Voici le code d'implémentation :

abstract class FShape
{
    protected $color = null;
    public function __construct(IColor $color)
    {
        $this->color = $color;
    }
    public function shape ()
    {
        echo $this->color->color() . $this->setShape() . PHP_EOL;
    }
    protected abstract function setShape ();
}

class CircleShape extends FShape
{
    protected function setShape ()
    {
        return '圆形';
    }
}

class SquareShape extends FShape
{
    protected function setShape ()
    {
        return '正方形';
    }
}

interface IColor
{
    public function color ();
}

class BlueColor implements IColor
{
    public function color ()
    {
        return '蓝色';
    }
}

class RedColor implements IColor
{
    public function color ()
    {
        return '红色';
    }
}
Copier après la connexion

Le code de test est le suivant :

$blueColor = new BlueColor();
$redColor = new RedColor();

$blueCircleShape = new CircleShape($blueColor);
$redCircleShape = new CircleShape($redColor);
$blueSquareShape = new SquareShape($blueColor);
$redSquareShape = new SquareShape($redColor);

$blueCircleShape->shape();
$redCircleShape->shape();
$blueSquareShape->shape();
$redSquareShape->shape();
Copier après la connexion

Après avoir utilisé le mode pont, notre code est conforme au "principe d'ouverture et de fermeture". ou la couleur est ajoutée, il suffit d'ajouter de nouvelles classes. Il n'est pas nécessaire de modifier la classe précédente.

Apprentissage recommandé :

tutoriel vidéo php

tutoriel vidéo mysql

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:php.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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!