2.6. 桥梁(桥接)模式(Bridge)

未匹配的标注

前言

桥接有点复杂,想不到实际的使用场景,一般用于多维
很大部分参考: 设计模式 - 桥接模式

任务

某个闹钟产品:
他们有n种图形:正方形 三角形 椭圆形
n种颜色:红色 蓝色 黄色
任意搭配:比如 红色 正方形闹钟 、 蓝色的 椭圆形闹钟

uml

桥接模式有四个角色: 抽象类 扩充抽象类 实现类接口 具体实现类
定义: 将抽象与实现分离,这样两者可以独立地改变。

  1. 分离: 抽象类实现类 分离
  2. 独立改变: 假设在扩充抽象类增加大小属性 … 见最后面

桥梁(桥接)模式(Bridge)

代码实现

<?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

桥梁(桥接)模式(Bridge)

新来的,再把这个uml也实现下,今晚10点前发我。

这是对你的磨练,奥利给 !

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~