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; } }
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; } }
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 '红色'; } }
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 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:
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!