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点前发我。
这是对你的磨练,奥利给 !
          
php设计模式学习
            
            
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: