【php设计模式】桥接模式

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

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

举例:

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

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();

使用场景:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python爬虫实战之路

PyQt5的主窗口QMainWindow简介

看过上一篇我们知道,在PyQt5中了,所有的控件都是继承自。在桌面应用当中,我们常用的软件都会包含一个主窗口。主窗口就是承载所有控件的一个窗体。在PyQt5当中...

43820
来自专栏luxixing

Java 新手入门需要关注的一些问题

11420
来自专栏Unity游戏开发

C#-特性、反射

给程序添加的声明性标签 .Net 提供了两种特性:预定义特性 自定义特性 预定义特性 : 三种 1.条件方法 : 只有在预编译指令和conditional...

8710
来自专栏Unity游戏开发

C++虚函数表

文章参考:https://blog.csdn.net/primeprime/article/details/80776625

56220
来自专栏Unity游戏开发

C#-面向对象编程、接口、泛型

1 开闭原则:对扩展开放,对修改(old Code)关闭 2 类的单一职责:每个类有且只有一个改变它的原因 3 优先使用组合而非继承: 避免耦合度过高 4...

12320
来自专栏陌上风骑驴看IC

Innovus 小技巧 | Innovus 中如何验证低功耗设计

此处论及的低功耗设计是指带IEEE1801 或CPF 的设计,即有多个电压域的设计,对于这样的设计,power mesh 跟placement 做完后,通常需要...

28220
来自专栏计算机图形学 前端可视化 WebGL

WebGL2系列之图元重启

在使用WebGL绘制图形的时候,大多数情况下,绘制一个图形的时候,其各个图元都是相连的。 但是在一些情况下,我们需要绘制图元不相连的图形,如果绘制的模式是gl....

11640
来自专栏hadoop学习笔记

部分常用分词工具使用整理

HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、...

12140
来自专栏luxixing

Yii2 框架核心概念之组件(手册翻译)

组件是YII框架application(应用)的主要组成部分,它是 [yii\base\Component]的实例或者子类。组件有三个重要特征(功能):

12620
来自专栏LieBrother

设计模式看了又忘,忘了又看?

耗时了 5 个月,终于把设计模式一整个系列写完。其实设计模式这一系列文章网上已经有很多非常好、非常优秀的文章,为什么要写呢?

12740

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励