PHP-Entwurfsmuster: Lernerfahrung im Bridge-Modus (mit Fallcode)

齐天大圣
Freigeben: 2023-04-09 12:20:02
Original
2065 Leute haben es durchsucht

Angenommen, Sie haben eine Formklasse (Shape), die derzeit zwei Unterklassen erweitert, die Kreisklasse und die Quadratklasse. Der Pseudocode lautet wie folgt:

interface Shape
{
    function fill ();
}

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

class SquareShape implements Shape
{
    public function fill ()
    {
        echo '正方形' . PHP_EOL;
    }
}
Nach dem Login kopieren

Jetzt möchten Sie der Form Farben hinzufügen – Rot, Blau. Was sollten Sie also tun? Wenn Sie die Idee der Vererbung verwenden, müssen Sie vier Klassen wie folgt schreiben:

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;
    }
}
Nach dem Login kopieren

Aber wenn ich jetzt eine neue Form hinzufügen möchte – ein Dreieck, a neue Farbe - Schwarz und Weiß. Dann brauchen wir 12 Unterklassen (Klassenexplosion). Gibt es also eine gute Möglichkeit, das Problem zu lösen?

Synthese (Kombination) und Aggregation

Bevor wir die oben genannten Probleme lösen, möchten wir die Bedeutung von Synthese und Aggregation verstehen.

Prinzip der Zusammensetzung und Aggregation: Versuchen Sie, Zusammensetzung/Aggregation zu verwenden und versuchen Sie, keine Vererbung zu verwenden.

Synthese (Kombination): Zeigt eine Beziehung (starke Beziehung) zwischen einem Ganzen und einem Teil an. Sie haben den gleichen Lebenszyklus, wie die Beziehung zwischen einer Person und dem Herzen Teil einer Person.

Aggregation: Stellt eine Beziehung zwischen dem Ganzen und Teilen dar (schwache Beziehung), was darauf hinweist, dass Objekt A Objekt B enthalten kann, Objekt B jedoch nicht Teil von Objekt A ist. Wir haben oben zum Beispiel über Form und Farbe gesprochen. Form kann Farbe enthalten, aber Farbe ist nicht Teil der Form.

Der Bridge-Modus nutzt Aggregation, um das System zu entkoppeln.

Bridge-Modus

Definition: Trennen Sie den abstrakten Teil von seiner Implementierung, sodass sie sich unabhängig voneinander ändern können

Über der Definition In unserem obigen Beispiel kann ein System mehrere Winkelklassifizierungen (Farbe, Form) haben und jede Klassifizierung kann sich ändern (neue Formen und Farben werden hinzugefügt). Dann können wir die Implementierung des Systems von mehreren trennen Perspektiven und reduzieren die Kopplung zwischen ihnen.

Wie kann man das erreichen? Das Folgende ist der Implementierungscode:

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 '红色';
    }
}
Nach dem Login kopieren

Der Testcode lautet wie folgt:

$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();
Nach dem Login kopieren

Nach Verwendung des Bridge-Modus entspricht unser Code dem „Öffnungs- und Schließprinzip“. oder Farbe hinzugefügt wird, müssen wir nur neue Klassen hinzufügen. Es besteht keine Notwendigkeit, die vorherige Klasse zu ändern.

Empfohlenes Lernen:

PHP-Video-Tutorial

MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonPHP-Entwurfsmuster: Lernerfahrung im Bridge-Modus (mit Fallcode). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage