设计模式

设计模式 桥接模式

2020-06-09  本文已影响0人  Yohann丶blog
WechatIMG30.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类图

桥接模式.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
芒果茶大杯不加冰
上一篇 下一篇

猜你喜欢

热点阅读