2.6. 桥梁(桥接)模式(Bridge)
前言
桥接有点复杂,想不到实际的使用场景,一般用于多维
。
很大部分参考: 设计模式 - 桥接模式。
任务
某个闹钟产品:
他们有n种图形:正方形
三角形
椭圆形
n种颜色:红色
蓝色
黄色
任意搭配:比如 红色
正方形
闹钟 、 蓝色的
椭圆形
闹钟
uml
桥接模式有四个角色: 抽象类
扩充抽象类
实现类接口
具体实现类
定义: 将抽象与实现分离,这样两者可以独立地改变。
- 分离:
抽象类
与实现类
分离 - 独立改变: 假设在
扩充抽象类
增加大小属性 … 见最后面
代码实现
<?php
//抽象图形类
abstract class Graphics
{
//具体颜色的class
public $color;
public function __construct(Color $color)
{
$this->color = $color;
}
//输出
abstract public function display();
}
//正方形 实现图形
class Square extends Graphics
{
public function display()
{
echo "这是一个" ;
echo $this->color->set();
echo "正方形闹钟\n";
}
}
// 同 Square类
class Triangle extends Graphics{ public function display(){} } //三角形
class Oval extends Graphics{ public function display(){} } //椭圆形
//颜色类
abstract class Color
{
abstract public function set();
}
class Red extends Color
{
public function set()
{
echo "红色的";
}
}
// 同 Red类
class Yellow extends Color { public function set(){} } // 黄色
class Blue extends Color { public function set(){} } // 蓝色
$square = new Square(new Red());
$square->display(); //
扩展
18:00 已到,shutdown -s -t 0
准备回车键。
Boss: 忘了跟你说了,客户的闹钟还分大小的,比如大
红色
正方形
的闹钟小
黄色
长方形
的闹钟,加下班 今天搞定它。
uml
新来的,再把这个uml也实现下,今晚10点前发我。
这是对你的磨练,奥利给 !