绘制图形时,可以抽象出一个图形类。
然后,增加新的需求,需要给绘制的图形添加颜色,此时系统引入了两个变化维度。有两种方案:
每种图形提供一套颜色的实现(继承关系)
组合图形和颜色(关联关系)
对于第一个方案,类的数量会指数级增长,且类之间的继承导致强耦合。第二种方案更优。
桥接模式(Bridge Pattern)将抽象部分与实现部分分离,使它们都可以独立地变化。
桥接模式包含四个角色:
Abstraction:抽象类RefinedAbstraction:扩充抽象类Implementor:实现类接口ConcreteImplementor:具体实现类下面例子中,如果要添加新的形状,只需要添加形状类并继承 Shape 即可。如果要添加新的颜色,只需要添加颜色类并继承 Color 即可。
<?php abstract class Shape { private $color; public function __construct(Color $color) { $this->color = $color; } public abstract function getShape(); public function getColorShape() { return $this->color->getColor() . ' ' . $this->getShape() . '<br/>'; } } class Rect extends Shape { public function getShape() { return 'Rect'; } } class Circle extends Shape { public function getShape() { return 'Circle'; } } abstract class Color { public abstract function getColor(); } class Red extends Color { public function getColor() { return 'Red'; } } class Blue extends Color { public function getColor() { return 'Blue'; } } $rect = new Rect(new Red()); echo $rect->getColorShape(); $circle = new Circle(new Blue()); echo $circle->getColorShape();输出:
Red Rect Blue Circle转载于:https://www.cnblogs.com/kika/p/10851562.html
相关资源:数据结构—成绩单生成器