php桥接模式的实例用法及代码分析
说明
1、将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果。
2、结构分为Abstraction抽象类、RefindAbstraction被提炼的抽象类、Implementor实现类、ConcreteImplementor具体实现类 、Client客户端代码。
实例
?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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | /** * 颜色抽象类 * Class Colour */ abstract class Colour { /** * @return mixed */ abstract public function run(); } /** * 黑色 * Class Black */ class Black extends Colour { public function run() { // TODO: Implement run() method. return '黑色' ; } } /** * 白色 * Class White */ class White extends Colour { public function run() { // TODO: Implement run() method. return '白色' ; } } /** * 红色 * Class Red */ class Red extends Colour { public function run() { // TODO: Implement run() method. return '红色' ; } } /** * 形状抽象类 * Class Shape */ abstract class Shape { /** * 颜色 * @var Colour */ protected $colour ; /** * Shape constructor. * @param Colour $colour */ public function __construct(Colour $colour ) { $this ->colour = $colour ; } /** * @return mixed */ abstract public function operation(); } /** * 圆形 * Class Round */ class Round extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this ->colour->run() . '圆形<br>' ; } } /** * 长方形 * Class Rectangle */ class Rectangle extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this ->colour->run() . '长方形<br>' ; } } /** * 正方形 * Class Square */ class Square extends Shape { /** * @return mixed|void */ public function operation() { // TODO: Implement operation() method. echo $this ->colour->run() . '正方形<br>' ; } } // 客户端代码 // 白色圆形 $whiteRound = new Round ( new White()); $whiteRound ->operation(); // 黑色正方形 $blackSquare = new Square( new Black()); $blackSquare ->operation(); // 红色长方形 $redRectangle = new Rectangle( new Red()); $redRectangle ->operation(); |
运行结果
白色圆形
黑色正方形
红色长方形
内容扩展:
桥接模式
桥连模式:将抽象部分与实现部分分离,使它们都可以独立的变化。它是一种结构性模式,又称柄体(Handle and body)模式或者接口(Interface)模式。 当一个抽象可能有多个实现时,通常用继承来协调他们。抽象类的定义对该抽象的接口。而具体的子类则用不同的方式加以实现,但是此方法有时不够灵活。继承机制将抽象部分与他的视线部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和充用。
理解桥接模式,重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
•抽象化:抽象化就是忽略一些信息,把不同的实体当作同样的实体对待。在面向对象中,将对象的共同性质抽取出来形成类的过程即为抽象化的过程。
•实现化:针对抽象化给出的具体实现,就是实现化,抽象化与实现化是一对互逆的概念,实现化产生的对象比抽象化更具体,是对抽象化事物的进一步具体化的产物。
•脱耦:脱耦就是将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联,将两个角色之间的继承关系改为关联关系。桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化,这就是桥接模式的用意。
适用性
1). 你不希望在抽象和他的实现部分之间有一个固定的邦定关系,如在程序的运行时刻实现部分应该可以被选择或者切换。
2). 类的抽象以及他的视像都可以通过生成子类的方法加以扩充。这时bridge模式使你可以对不同的抽象接口
和实现部分进行组合,并对他们进行扩充。
3). 对一个抽象的实现部分的修改应该对客户不产生影响,即客户的代码不需要重新编译。
4). 你想对客户完全隐藏抽象的实现部分。
5). 你想在多个实现间 共享实现,但同时要求客户并不知道这一点。
到此这篇关于php桥接模式的实例用法及代码分析的文章就介绍到这了,更多相关php桥接模式是什么内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.py.cn/php/jiaocheng/31360.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。