学习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 相关文章推荐
php adodb连接不同数据库
Mar 19 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
php反射应用示例
Feb 25 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php中JSON的使用方法
Apr 30 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
关于PHP文件的自动运行方法分析
May 13 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 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
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
xml和web特殊字符
2009/04/28 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Python中的异常处理学习笔记
2015/01/28 Python
浅谈五大Python Web框架
2017/03/20 Python
详解python中的文件与目录操作
2017/07/11 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
python Xpath语法的使用
2020/11/26 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
金融专业个人求职信
2013/09/22 职场文书
新领导上任欢迎词
2014/01/13 职场文书
新护士岗前培训制度
2014/02/02 职场文书
医院标语大全
2014/06/23 职场文书
涨价通知怎么写
2015/04/23 职场文书
作弊检讨书范文
2015/05/06 职场文书