学习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调用Java对象的方法
Oct 09 PHP
用PHP制作静态网站的模板框架(一)
Oct 09 PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 PHP
php 变量定义方法
Jun 14 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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中的闭包(匿名函数)浅析
2015/02/07 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
Yii2单元测试用法示例
2016/11/12 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
jquery自定义表格样式
2015/11/23 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python str与repr的区别
2013/03/23 Python
零基础写python爬虫之神器正则表达式
2014/11/06 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Python itertools.product方法代码实例
2020/03/27 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
办理信用卡工作证明
2014/09/30 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang