声明:本系列博客参考资料《大话设计模式》,作者程杰。

桥接模式:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式——将抽象部分与它的实现部分分离,使他们可以独立地变化。

UML类图:

角色介绍:

抽象化(AbstractRoad)角色:抽象化给出的定义,并保存一个对实现化对象的引用。

修正抽象化(SpeedWay)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。

实现化(AbstractCar)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。

具体实现化(Bus)角色:这个角色给出实现化角色接口的具体实现。

代码体现:

<?php
/*** Created by PhpStorm.* User: Jiang* Date: 2015/4/26* Time: 16:39*//**抽象化角色            抽象路* Class AbstractRoad*/
abstract class AbstractRoad
{public $icar;abstract function Run();
}/**具体的             高速公路* Class speedRoad*/
class SpeedRoad extends AbstractRoad
{function Run(){$this->icar->Run();echo ":在高速公路上。";}
}/**乡村街道* Class Street*/
class Street extends AbstractRoad
{function Run(){$this->icar->Run();echo ":在乡村街道上。";}
}/**抽象汽车接口* Interface ICar*/
interface ICar
{function Run();
}/**吉普车* Class Jeep*/
class Jeep implements ICar
{function Run(){echo "吉普车跑";}
}/**小汽车* Class Car*/
class Car implements ICar
{function Run(){echo "小汽车跑";}
}

测试代码:

/------------------------桥接模式测试代码------------------
require_once "./Bridge/Bridge.php";
$speedRoad=new SpeedRoad();
$speedRoad->icar=new Car();
$speedRoad->Run();echo "<hr/>";$street=new Street();
$street->icar=new Jeep();
$street->Run();

适用场景:

1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。

2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。

3.一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。

4.虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

欢迎关注我的视频课程,地址如下,谢谢。

PHP面向对象设计模式

PHP设计模式——桥接模式相关推荐

  1. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  2. 【学习笔记】ABAP OOD设计模式 - 桥接模式

    ABAP OOD设计模式 - 桥接模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 桥接模式又称为桥梁模式,在程序开发中,采用不同的维度分解一系列对象,然后采用组 ...

  3. 跟着ZHONGHuan学习设计模式--桥接模式

    转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...

  4. 2.设计模式-桥接模式

    文章目录 一.使用场景 二.实现方法 三.优势与劣势 四.经典案例 本文笔记来自于: 狂神的设计模式 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构模型,又称为柄体( ...

  5. 设计模式--桥接模式(Bridge)

    设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...

  6. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  7. 23种设计模式——桥接模式

    文章目录 23种设计模式--桥接模式 1.桥接模式概述 2.桥接模式结构 3.桥接模式的实现 4.桥接模式的注意事项和细节 23种设计模式--桥接模式 1.桥接模式概述 桥接模式介绍 桥接(Bridg ...

  8. 设计模式——桥接模式实验报告

    目录 设计模式--桥接模式实验报告 一.实验题目 二.所用模式结构视图 三.本实例类图 四.实例实现代码 1.抽象消息类 2.普通消息类 3.加急消息类 4.特急消息类 5.实现发送消息的统一接口: ...

  9. Java设计模式-桥接模式 理论代码相结合

    继Java设计模式-装饰器模式后的桥接模式出来了,感兴趣的话,就来看一看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢 ...

  10. 结合JDK源码看设计模式——桥接模式

    前言: 在我们还没学习框架之前,肯定都学过JDBC.百度百科对JDBC是这样介绍的[JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Jav ...

最新文章

  1. CBV 验证装饰器的使用
  2. vue源码构建代码分析
  3. 第15章 关于本软件
  4. Matlab语音信号频谱分析代码实现
  5. 弹出框页面中使用jquery.validate验证控件
  6. Kinect开发笔记之五使用PowerShell控制Kinect
  7. linux prelink.cache,Linux基础操作
  8. 李宏毅机器学习(十一)meta-learning和ML一样是三个步骤
  9. 小米总参php面试题_php面试题之二——Javascript(基础部分)
  10. java arraylist 添加对象_如何在Java中将对象添加到ArrayList
  11. 编译出错:self-encoder.context-me_method = ME_UMH;
  12. 微型计算机控制技术赖pdf,微型计算机控制技术.pdf
  13. 用c语言制作简易的个人通讯录管理系统
  14. 流浪四十年,中国科幻撒点野
  15. C# Activator和new的区别
  16. ggplot2设置坐标轴范围_6.6 坐标轴:设置坐标轴上刻度的显示位置
  17. Linux连接蓝牙键盘
  18. 商女不知亡国恨,隔江犹吃炒腰花
  19. 如何获取特定用户组内的无效账户?
  20. myeclipse重新编译java,反编译class文件并重新编译的方法

热门文章

  1. dbforge连接mysql_DbForge Schema Compare for MySQL入门教程:如何连接到数据库
  2. python中trun是什么意思_Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解...
  3. python对文件操作的相关函数_第六章、Python文件操作
  4. 软件有效期如何实现_足疗洗浴收银软件如何实现跨店管理?
  5. iis7连接mysql_windows2008中正确使用IIS7配置PHP与MySQL
  6. Commons IO -- IOUtils
  7. java框架ssm面试题2016_Java面试-框架篇(SSM-SpringMVC)
  8. 和catch的区别_面试刷题2:Exception和Error的区别?
  9. 逻辑回归详解及Python实现
  10. linux waitpid子进程,关于waitpid()函数的问题,为什么最后子进程没退出来啊?...