Mẫu thiết kế Bridge trong PHP
Feb 23 2023
Cách triển khai mẫu thiết kế cấu trúc này trong PHP
Mẫu thiết kế cầu là gì? Mẫu Bridge là một mẫu thiết kế tách rời phần trừu tượng khỏi phần triển khai của nó, để cả hai có thể thay đổi độc lập. Trong PHP, mẫu Bridge có thể được triển khai bằng các giao diện, lớp trừu tượng và tính kế thừa.
Mẫu thiết kế cầu là gì?
Mẫu Bridge là một mẫu thiết kế tách rời phần trừu tượng khỏi phần triển khai của nó, để cả hai có thể thay đổi độc lập.
Trong PHP, mẫu Bridge có thể được triển khai bằng các giao diện, lớp trừu tượng và tính kế thừa.
Đây là một ví dụ triển khai mẫu Bridge trong PHP:
<?php
interface DrawAPI {
public function drawCircle($x, $y, $radius);
}
class DrawAPI1 implements DrawAPI {
public function drawCircle($x, $y, $radius) {
echo "API1.circle at ($x,$y) radius $radius.\n";
}
}
class DrawAPI2 implements DrawAPI {
public function drawCircle($x, $y, $radius) {
echo "API2.circle at ($x,$y) radius $radius.\n";
}
}
abstract class Shape {
protected $drawAPI;
protected function __construct(DrawAPI $drawAPI) {
$this->drawAPI = $drawAPI;
}
public abstract function draw();
}
class CircleShape extends Shape {
private $x, $y, $radius;
public function __construct($x, $y, $radius, DrawAPI $drawAPI) {
parent::__construct($drawAPI);
$this->x = $x;
$this->y = $y;
$this->radius = $radius;
}
public function draw() {
$this->drawAPI->drawCircle($this->x, $this->y, $this->radius);
}
}
// Usage:
$shape1 = new CircleShape(1, 2, 3, new DrawAPI1());
$shape2 = new CircleShape(5, 7, 11, new DrawAPI2());
$shape1->draw(); // Output: API1.circle at (1,2) radius 3.
$shape2->draw(); // Output: API2.circle at (5,7) radius 11.
Bằng cách tách phần trừu tượng ( Shape) khỏi phần triển khai ( DrawAPI), chúng ta có thể thay đổi từng phần một cách độc lập. Ví dụ: chúng ta có thể thêm một DrawAPI3triển khai mà không thay đổi bất kỳ Shapelớp nào.
Cảm ơn bạn đã dành thời gian!
Hãy và làm theo!

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































