学习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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
PHP chmod 函数与批量修改文件目录权限
May 10 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
php去除html标记的原生函数详解
Jan 27 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
php文件上传类完整实例
May 14 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
Laravel 连接(Join)示例
Oct 16 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
es6函数之尾递归用法实例分析
2020/04/25 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Python import自定义模块方法
2015/02/12 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Python实现疫情地图可视化
2021/02/05 Python
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
一个C/C++编程面试题
2013/11/10 面试题
安全责任书范本
2014/04/15 职场文书
主题党日活动总结
2014/07/08 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
2015中学学校工作总结
2015/07/20 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS