社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
接下来用代码实现一个颜色组合的例子,有三种颜色:黑、白、红,三种形状:圆形、正方形、长方形,可以自由组合。在这个例子中Abstraction表示形状,RefindAbstraction表示圆形、正方形、长方形,Implementor表示颜色,ConcreteImplementor表示黑、白、红。
/** * 颜色抽象类 * 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(); // 运行结果 白色圆形 黑色正方形 红色长方形
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!