学习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概述.
Oct 09 PHP
PHP安装攻略:常见问题解答(二)
Oct 09 PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
PHP XML error parsing SOAP payload on line 1
Jun 17 PHP
PHP 图片水印类代码
Aug 27 PHP
php强制运行广告的方法
Dec 01 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
如何隐藏你的.php文件
2007/01/04 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
Python中的is和id用法分析
2015/01/26 Python
python编写Logistic逻辑回归
2020/12/30 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
集团公司人力资源部岗位职责
2014/01/03 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
师德先进个人材料
2014/12/20 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
创业计划书之家教托管
2019/09/25 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
2022年显卡天梯图(6月更新)
2022/06/17 数码科技
Hive导入csv文件示例
2022/06/25 数据库