前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【php设计模式】桥接模式

【php设计模式】桥接模式

作者头像
码缘
发布2019-06-17 16:11:12
3980
发布2019-06-17 16:11:12
举报
文章被收录于专栏:PHP修行之路

定义: 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

角色: 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。   扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。   实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。   具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

举例:

车分为很多种(小轿车,公交车),并且每种车都会跑在不同的道路上(街道,高速路),如果使用继承的方式我们可以实现这些场景   但是那样做的话会使得代码变得可扩展行很差,但是使用桥接模式就不一样啦

代码语言:javascript
复制
abstract class Road{
    public $car;
    public function __construct(Car $car){
        $this->car = $car;
    }
    public abstract function run();
}

class SpeedWay extends Road{
    public function run(){
        echo $this->car->name." run on SpeedWay\n";
    }
}

class Street extends Road{
    public function run(){
        echo $this->car->name." run on Street\n";
    }
}

abstract class Car{
    public $name;
}

class SmallCar extends Car{
    public function __construct(){
        $this->name = "SmallCar";
    }
}

class Bus extends Car{
    public function __construct(){
        $this->name = "Bus";
    }
}

$small_car = new SmallCar();
$SpeedWay = new SpeedWay($small_car);
$SpeedWay->run();

$bus = new Bus();
$Street = new Street($bus);
$Street->run();

使用场景:

当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。   当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。   当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。

代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档