学习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 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
php简单获取文件扩展名的方法
Mar 24 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP检查URL包含特定字符串实例方法
Feb 11 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 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
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
Selenium元素的常用操作方法分析
2018/08/10 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
2014年文员工作总结
2014/11/18 职场文书
项目建议书
2015/02/04 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android