桥接模式(bridge pattern)

抽象实现解耦,使得二者可以独立地变化
一般用在两个或多个维度(抽象)的变化。

bridge
bridge

例如:
抽象1:Road 具体(高速公路,乡村公路)
抽象2:Car 具体(Jeep,BMW)
Jeep 可以在告诉公路上跑,也可以在乡村公路上跑,同样BMW也可以。

实现例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
Abstract Road{
/**
* 在路上跑
/*
Abstract function onRoad();
}
Class SpeedRoad extends Road(){
public function onRoad(){
echo '在高速公路上';
}
}
Class CountryRoad extends Road(){
public function onRoad(){
echo '在乡村公路上';
}
}
Abstract Car{
public $road;
//车可以跑
Abstract function run();
}
Class Jeep extends Car{
public function run(){
echo 'Jepp 跑';
$this->road->onRoad();
}
}
Class BMW extends Car{
public function run(){
echo 'BMW 跑';
$this->road->onRoad();
}
}
//test
$speedRoad = new SpeedRoad;
$countryRoad = new CountryRoad;
$Jeep = new Jeep();
$Jeep->road = $speedRoad;
$Jeep->run(); //Jepp 跑在高速公路上
$jeep->road = $countryRoad;
$jeep->run(); //Jepp 跑在乡村公路上
$Bmw = new BMW;
$Bmw->road = $speedRoad;
$Bmw->run(); //BMW 跑在高速公路上
$Bmw->road = $countryRoad;
$Bmw->run(); //BMW 跑在乡村公路上