学习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 parse_url 一个好用的函数
Oct 03 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
php判断一个数组是否为有序的方法
Mar 27 PHP
PHP生成唯一订单号
Jul 05 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
round robin权重轮循算法php实现代码
May 28 PHP
thinkPHP框架RBAC实现原理分析
Feb 01 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
详细分析PHP7与PHP5区别
Jun 26 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运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
在校大学生的职业生涯规划书
2014/03/14 职场文书
机关会计岗位职责
2014/04/08 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
初一新生军训方案
2014/05/22 职场文书
家长会感言
2015/08/01 职场文书
爱国教育主题班会
2015/08/14 职场文书