PHP 桥接模式
介绍
桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与其实现部分分离,使它们可以独立变化。这种模式通过将抽象和实现解耦,使得两者可以独立扩展,而不会相互影响。
桥接模式的核心思想是组合优于继承。通过组合的方式,我们可以将抽象类和实现类分开,从而避免继承带来的类爆炸问题。
桥接模式的结构
桥接模式通常包含以下几个角色:
- 抽象类(Abstraction):定义抽象接口,并持有一个对实现 类的引用。
- 扩展抽象类(Refined Abstraction):对抽象类的扩展,通常是对抽象类的具体实现。
- 实现类接口(Implementor):定义实现类的接口,通常是一个抽象类或接口。
- 具体实现类(Concrete Implementor):实现类接口的具体实现。
我们可以通过以下Mermaid图来理解桥接模式的结构:
代码示例
让我们通过一个简单的例子来理解桥接模式。假设我们有一个图形绘制系统,支持多种图形(如圆形、矩形)和多种颜色(如红色、蓝色)。我们可以使用桥接模式来将图形和颜色分离。
实现类接口
首先,我们定义一个颜色接口 Color
,它表示颜色的实现:
interface Color {
public function fill(): string;
}
具体实现类
接下来,我们实现两种具体的颜色类:
class Red implements Color {
public function fill(): string {
return "Red";
}
}
class Blue implements Color {
public function fill(): string {
return "Blue";
}
}
抽象类
然后,我们定义一个抽象类 Shape
,它持有一个对 Color
的引用:
abstract class Shape {
protected $color;
public function __construct(Color $color) {
$this->color = $color;
}
abstract public function draw(): string;
}