[php]php设计模式 Bridge (桥接模式)
1 <?php
2 /**
3 * 桥接模式
4 *
5 * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化
6 */
7 abstractclass Implementor
8 {
9 abstractpublicfunction operation();
10 }
11
12 class ConcreteImplementorA extends Implementor
13 {
14 publicfunction operation()
15 {
16 echo"ConcreteImplementorA Operation<br/>";
17 }
18 }
19
20 class ConcreteImplementorB extends Implementor
21 {
22 publicfunction operation()
23 {
24 echo"ConcreteImplementorB Operation<br/>";
25 }
26 }
27
28 class Abstraction
29 {
30 protected$_implementor=null;
31
32 publicfunction setImplementor($implementor)
33 {
34 $this->_implementor =$implementor;
35 }
36
37 publicfunction operation()
38 {
39 $this->_implementor->operation();
40 }
41 }
42
43 class RefinedAbstraction extends Abstraction
44 {
45 }
46
47 class ExampleAbstraction extends Abstraction
48 {
49 }
50
51 //
52 $objRAbstraction=new RefinedAbstraction();
53 $objRAbstraction->setImplementor(new ConcreteImplementorB());
54 $objRAbstraction->operation();
55
56 $objRAbstraction->setImplementor(new ConcreteImplementorA());
57 $objRAbstraction->operation();
58
59 $objEAbstraction=new ExampleAbstraction();
60 $objEAbstraction->setImplementor(new ConcreteImplementorB());
61 $objEAbstraction->operation();
2 /**
3 * 桥接模式
4 *
5 * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化
6 */
7 abstractclass Implementor
8 {
9 abstractpublicfunction operation();
10 }
11
12 class ConcreteImplementorA extends Implementor
13 {
14 publicfunction operation()
15 {
16 echo"ConcreteImplementorA Operation<br/>";
17 }
18 }
19
20 class ConcreteImplementorB extends Implementor
21 {
22 publicfunction operation()
23 {
24 echo"ConcreteImplementorB Operation<br/>";
25 }
26 }
27
28 class Abstraction
29 {
30 protected$_implementor=null;
31
32 publicfunction setImplementor($implementor)
33 {
34 $this->_implementor =$implementor;
35 }
36
37 publicfunction operation()
38 {
39 $this->_implementor->operation();
40 }
41 }
42
43 class RefinedAbstraction extends Abstraction
44 {
45 }
46
47 class ExampleAbstraction extends Abstraction
48 {
49 }
50
51 //
52 $objRAbstraction=new RefinedAbstraction();
53 $objRAbstraction->setImplementor(new ConcreteImplementorB());
54 $objRAbstraction->operation();
55
56 $objRAbstraction->setImplementor(new ConcreteImplementorA());
57 $objRAbstraction->operation();
58
59 $objEAbstraction=new ExampleAbstraction();
60 $objEAbstraction->setImplementor(new ConcreteImplementorB());
61 $objEAbstraction->operation();
think in coding