学习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 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
详解php与ethereum客户端交互
Apr 28 PHP
PHP实用小技巧之调用录像的方法
Dec 05 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
php将字符串转换为数组实例讲解
May 05 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
css图片自适应大小
2007/11/28 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
Python下线程之间的共享和释放示例
2015/05/04 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
销售工作岗位职责
2013/12/24 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
护理专业自我鉴定
2014/01/30 职场文书
副董事长岗位职责
2014/04/02 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
公积金贷款承诺书
2015/04/30 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA