桥接模式(bridge pattern)
将抽象和实现解耦,使得二者可以独立地变化。
一般用在两个或多个维度(抽象)的变化。
例如:
抽象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 跑在乡村公路上
|