大话设计模式之PHP篇 - 适配器模式
2017-02-13 16:07
246 查看
定义
将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作。
角色
Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口。
Adaptee被适配者,就是需要被适配的接口。
Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。
WEB应用
适配器模式最常见的应用为数据库应用,一个web应用通常可能会使用不同的数据库驱动程序,比如mysql、mysqli、pdo、sqlite等,而整个web应用当中不可能针对每个数据库驱动,编写多种程序,对于web应用程序来讲,需要的是统一外部实现,而数据库驱动的内部实现则不关心。
其实换成现实中的另一种说法:当你将程序完整的写结束时,你的客户突然说:听说pdo比mysql好,要不用pdo吧?客户笑眯眯的看着你,你傻乎乎的望着客户,哎,改吧!
总不见得要所有代码都修改一遍吧,这时候适配器模式就派上了用场!
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/02/379e9d28fca7f12ca729aef691ab301b.jpg)
如果再增加其他的数据库驱动程序,只要根据接口标准增加新的类即可,客户端稍作改动即可!
将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作。
角色
Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口。
Adaptee被适配者,就是需要被适配的接口。
Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。
WEB应用
适配器模式最常见的应用为数据库应用,一个web应用通常可能会使用不同的数据库驱动程序,比如mysql、mysqli、pdo、sqlite等,而整个web应用当中不可能针对每个数据库驱动,编写多种程序,对于web应用程序来讲,需要的是统一外部实现,而数据库驱动的内部实现则不关心。
其实换成现实中的另一种说法:当你将程序完整的写结束时,你的客户突然说:听说pdo比mysql好,要不用pdo吧?客户笑眯眯的看着你,你傻乎乎的望着客户,哎,改吧!
总不见得要所有代码都修改一遍吧,这时候适配器模式就派上了用场!
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/02/379e9d28fca7f12ca729aef691ab301b.jpg)
/*驱动接口*/ interface db_driver { function connect(); function query(); } /*mysql的数据库实现*/ class db_mysql implements db_driver { public function connect() { /*具体代码实现*/ } function query($sql) { /*具体代码实现*/ } } /*pdo的数据库实现*/ class db_pdo implements db_driver { public function connect() { /*具体代码实现*/ } function query($sql) { /*具体代码实现*/ } } /*定义适配器类*/ class db_adapter { private $db; function __construct($db_obj) { $this->db = $db_obj; } function connect() { $this->db->connect(); } function query($sql) { $this->db->query($sql); } } /*客户端应用*/ $db = new db_adapter(new db_mysql());
如果再增加其他的数据库驱动程序,只要根据接口标准增加新的类即可,客户端稍作改动即可!
相关文章推荐
- 大话设计模式之PHP篇 - 观察者模式
- 大话设计模式之PHP篇 - 策略模式
- 大话设计模式之PHP篇 - 简单工厂模式
- 大话设计模式之PHP篇 - 单例模式
- PHP实现链式操作
- php加密解密
- PHP面相对象中的重载与重写
- Yii2 修改 breadcrumb 首页图标
- Yii2.0中基于AccessControl的权限相关验证统一管理
- CI 3.1.3隐藏index.php
- php server
- PHP 面向对象及Mediawiki 框架分析(二)
- 关于在php中html标签的转换问题的解决,转义与反转义
- FTP服务器搭建
- phpstudy php5.4以上版本伪静态设置
- thinkphp-SQL调试
- thinkphp-性能调试
- 多叉树最短路径
- thinkphp-调试halt
- thinkphp-变量调试dump