学习php设计模式 php实现桥梁模式(bridge)


Posted in PHP onDecember 07, 2015

一、桥梁模式结构图

 学习php设计模式 php实现桥梁模式(bridge)

二、桥梁模式中主要角色
抽象化(Abstraction)角色:定义抽象类的接口并保存一个对实现化对象的引用。
修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:定义实现类的接口,不给出具体的实现。此接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以完全不同。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
具体实现化(Concrete Implementor)角色:实现实现化角色接口并定义它的具体实现。
三、桥梁模式的优点
1、分离接口及其实现部分
将Abstraction与Implementor分享有助于降低对实现部分编译时刻的依赖性
接口与实现分享有助于分层,从而产生更好的结构化系统
2、提高可扩充性
3、实现细节对客户透明。
四、桥梁模式适用场景
1、如果一个系统需要在构件的抽象化和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2、设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3、一个构件有多于一个的抽象化角色和实现化角色,并且系统需要它们之间进行动态的耦合。
4、虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
五、桥梁模式与其它模式
抽象工厂模式(abstract factory模式):抽象工厂模式可以用来创建和配置一个特定的桥梁模式。
适配器模式(adapter模式):适配器模式用来帮助无关的类协同工作。它通常是在系统设计完成之后才会被使用。然而,桥梁模式是在系统开始时就被使用,它使得抽象接口和实现部分可以独立进行改变。
状态模式(state模式):桥梁模式描述两个等级结构之间的关系,状态模式则是描述一个对象与状态对象之间的关系。状态模式是桥梁模式的一个退化的特殊情况。
六、桥梁模式PHP示例

<?php
/**
 * 抽象化角色
 * 抽象化给出的定义,并保存一个对实现化对象的引用。
 */
abstract class Abstraction {
 
 /* 对实现化对象的引用 */
 protected $imp;
 
 /**
 * 某操作方法
 */
 public function operation() {
 $this->imp->operationImp();
 }
}
 
/**
 * 修正抽象化角色
 * 扩展抽象化角色,改变和修正父类对抽象化的定义。
 */
class RefinedAbstraction extends Abstraction {
 
 public function __construct(Implementor $imp) {
 $this->imp = $imp;
 }
 
 /**
 * 操作方法在修正抽象化角色中的实现
 */
 public function operation() {
 echo 'RefinedAbstraction operation ';
 $this->imp->operationImp();
 }
}
 
/**
 * 实现化角色
 * 给出实现化角色的接口,但不给出具体的实现。
 */
abstract class Implementor {
 
 /**
 * 操作方法的实现化声明
 */
 abstract public function operationImp();
}
 
/**
 * 具体化角色A
 * 给出实现化角色接口的具体实现
 */
class ConcreteImplementorA extends Implementor {
 
 /**
 * 操作方法的实现化实现
 */
 public function operationImp() {
 echo 'Concrete implementor A operation <br />';
 }
}
 
/**
 * 具体化角色B
 * 给出实现化角色接口的具体实现
 */
class ConcreteImplementorB extends Implementor {
 
 /**
 * 操作方法的实现化实现
 */
 public function operationImp() {
 echo 'Concrete implementor B operation <br />';
 }
}
 
/**
 * 客户端
 */
class Client {
 
 /**
 * Main program.
 */
 public static function main() {
 $abstraction = new RefinedAbstraction(new ConcreteImplementorA());
 $abstraction->operation();
 
 $abstraction = new RefinedAbstraction(new ConcreteImplementorB());
 $abstraction->operation();
 }
}
 
Client::main();
?>

以上就是使用php实现桥梁模式的代码,还有一些关于装饰模式的概念区分,希望对大家的学习有所帮助。

PHP 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
获取远程文件大小的php函数
Jan 11 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
php计算十二星座的函数代码
Aug 21 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
php获取远程文件大小
Oct 20 PHP
Zend Framework入门知识点小结
Mar 19 PHP
Yii全局函数用法示例
Jan 22 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 #PHP
PHP函数func_num_args用法实例分析
Dec 07 #PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 #PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 #PHP
学习php设计模式 php实现建造者模式
Dec 07 #PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 #PHP
PHP面向对象详解(三)
Dec 07 #PHP
You might like
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
深入理解React高阶组件
2017/09/28 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
详解python 发送邮件实例代码
2016/12/22 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
python如何写个俄罗斯方块
2020/11/06 Python
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
领导调研接待方案
2014/02/27 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
工作报告范文
2019/06/20 职场文书
导游词之桂林山水
2019/09/20 职场文书
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle