设计模式 桥接模式
2020-06-09 本文已影响0人
Yohann丶blog
![](https://img.haomeiwen.com/i15325592/88966dbdaef93bc2.jpeg)
介绍
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立变化。有独立存在,扩展性强的特点。应用在需要不断更换调用对象却执行相同的调用方法,实现扩展功能的场景。
角色
角色 | 说明 |
---|---|
Abstraction | 定义抽象类,并包含一个对实现化对象的引用 |
Refined Abstraction | 是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法 |
Implementor | 定义实现化角色的接口,供扩展抽象化角色调用 |
ConcreteImplementor | 给出实现化角色接口的具体实现 |
角色示例
类名 | 担任角色 | 说明 |
---|---|---|
Size | Abstraction | 定义果茶杯子规格类,实现不用规格 |
NormalSize | Refined Abstraction | 定义正常杯类 |
BigSize | Refined Abstraction | 定义大杯类 |
SmallSize | Refined Abstraction | 定义小杯类 |
Ice | Abstraction | 定义冰量类,实现不用冰量 |
NormalIce | Refined Abstraction | 定义正常冰类 |
LessIce | Refined Abstraction | 定义少冰类 |
WithoutIce | Refined Abstraction | 定义不加冰类 |
FruitTea | Implementor | 定义配置果茶的方法,来配置具体果茶 |
MangoTea | ConcreteImplementor | 芒果茶类 |
StrawberryTea | ConcreteImplementor | 草莓茶类 |
UML类图
![](https://img.haomeiwen.com/i15325592/b34d3be624f60f3c.jpg)
代码
<?php
interface Size{
public function setSize();
}
class NormalSize implements Size
{
public function setSize()
{
return '正常杯';
}
}
class BigSize implements Size
{
public function setSize()
{
return '大杯';
}
}
class SmallSize implements Size
{
public function setSize()
{
return '小杯';
}
}
interface Ice{
public function setIce();
}
class NormalIce implements Ice
{
public function setIce()
{
return '正常杯';
}
}
class LessIce implements Ice
{
public function setIce()
{
return '少冰';
}
}
class WithoutIce implements Ice
{
public function setIce()
{
return '不加冰';
}
}
abstract class FruitTea{
protected $size;
protected $ice;
public function __construct(Size $size, Ice $ice)
{
$this->size = $size;
$this->ice = $ice;
}
abstract public function getTea();
}
class MangoTea extends FruitTea
{
public function getTea()
{
return "芒果茶".$this->size->setSize().$this->ice->setIce();
}
}
class StrawberryTea extends FruitTea
{
public function getTea()
{
return "草莓茶".$this->size->setSize().$this->ice->setIce();
}
}
$bigSize = new BigSize();
$withoutIce = new WithoutIce();
$mangoTea = new MangoTea($bigSize, $withoutIce);
echo $mangoTea->getTea();
创建 FruitTea.php,内容如上。
执行
$ php FruitTea.php
芒果茶大杯不加冰