桥接模式

 

桥梁模式(Bridge)也叫做桥接模式,用于将抽象和实现解耦,使得两者可以独立地变化。桥梁模式完全是为了解决继承的缺点而提出的设计模式。
系统设计时,发现类的继承有 N 层时,可以考虑使用桥梁模式。使用桥梁模式时主要考虑如何拆分抽象和实现,并不是一涉及继承就要考虑使用该模式。
在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

 

 

 1 <?php
 2 /**
 3  * 我们以汽车制造厂生产汽车为例,Vehicle 是抽象生产类,Motorcycle 和 Car 是具体实现子类,
 4  * 制造汽车分为生产和组装两部分完成,这意味着我们要在制造方法  manufacture 中实现生产和组装工作,
 5  * 这里我们将这一实现过程分离出去成为一个新的接口 Workshop,由该接口的实现类 Produce 和 Assemble 负责具体生产及组装,
 6  * 从而实现抽象(Vehicle)与实现(Workshop)的分离,让两者可以独立变化而不相互影响:
 7  */
 8 
 9 abstract class Vehicle
10 {
11     protected $workShop1;
12     protected $workShop2;
13 
14     protected function __construct(Workshop $workShop1, Workshop $workShop2)
15     {
16         $this->workShop1 = $workShop1;
17         $this->workShop2 = $workShop2;
18     }
19 
20     public function manufacture()
21     {
22     }
23 }
24 
25 class Motorcycle extends Vehicle
26 {
27     public function __construct(Workshop $workShop1, Workshop $workShop2)
28     {
29         parent::__construct($workShop1, $workShop2);
30     }
31 
32     public function manufacture()
33     {
34         print 'Motorcycle ';
35         $this->workShop1->work();
36         $this->workShop2->work();
37     }
38 }
39 
40 class Car extends Vehicle
41 {
42     public function __construct(Workshop $workShop1, Workshop $workShop2)
43     {
44         parent::__construct($workShop1, $workShop2);
45     }
46 
47     public function manufacture()
48     {
49         print 'Car ';
50         $this->workShop1->work();
51         $this->workShop2->work();
52     }
53 }
54 
55 
56 
57 
58 interface Workshop
59 {
60     public function work();
61 }
62 
63 class Produce implements Workshop
64 {
65     public function work()
66     {
67         print 'Produced ';
68     }
69 }
70 
71 class Assemble implements Workshop
72 {
73     public function work()
74     {
75         print 'Assembled';
76     }
77 }
View Code

 

posted @ 2017-01-08 19:58  _logan  阅读(122)  评论(0编辑  收藏  举报