博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php实现适配器模式
阅读量:5080 次
发布时间:2019-06-12

本文共 2170 字,大约阅读时间需要 7 分钟。

适配器模式(Adapter Pattern):将某个对象的接口适配为另一个对象所期望的接口。属于结构型设计模式。

(一)为什么需要适配器模式

1,某个操作数据库的有两套不同的数据库操作方法,我们通过适配器统一成一个接口。例如,我们待会把mysql和mysqli统一成一个接口。

2,我们有多套数据库对应了多种数据库操作,例如MySQL,SqlServer,Oralce,Redis都有对应的操作函数,或操作类。PDO把这些都统一成一个接口。

3,系统的增加一些新功能,创建了一个新的接口,但是老的接口并不想废弃。可以使用适配器模式,对用户隐藏这两个接口,提供用户所希望的接口。

(二)适配器UML图

(三)设计实例

把MySQL和mysqli统一成一个接口,用户可以调用同样的方法使用MySQL和mysqli操作数据库。

conn = $conn; } //查询方法 public function query($sql) { $res = mysql_query($sql, $this->conn); return $res; } //关闭方法 public function close() { mysql_close($this->conn); } } //MySQLi操作待适配类 class MySQLiAdaptee implements Target
{ protected $conn; public function connect($host, $user, $passwd, $dbname) { $conn = mysqli_connect($host, $user, $passwd, $dbname); $this->conn = $conn; } public function query($sql) { return mysqli_query($this->conn, $sql); } public function close() { mysqli_close($this->conn); } } //用户所期待的接口 Interface Target{ public function connect($host, $user, $passwd, $dbname); public function query($sql); public function close(); } //用户期待适配类 Class DataBase implements Target { protected $db ; //存放MySQLiAdapter对象或MySQLAdapter对象 public function __construct($type){ $type = $type."Adapter" ; $this->db = new $type ; } public function connect($host, $user, $passwd, $dbname){ $this->db->connect($host, $user, $passwd, $dbname); } public function query($sql){ return $this->db->query($sql); } public function close(){ $this->db->close(); } } //用户调用同一个接口,使用MySQL和mysqli这两套不同示例。 $db1 = new DataBase('MySQL'); $db1->connect('127.0.0.1','root','1234','myDB');die; $db1->query('select * from test'); $db1->close(); $db2 = new DataBase('MySQLi'); $db2->connect('127.0.0.1','root','1234','myDB'); $db2->query('select * from test'); $db2->close();

上面的代码只是一个示例,如果你运行以上的代码报了mysql函数不存在或是被废弃的错误。这是正常的,因为MySQL这套函数在PHP5.5以上的版本已经被废弃了。感兴趣的还可以去了解一下PDO的实现。

通过上面的代码,我们可以看到,使用适配器可以把不同的操作接口封装起来,对外显示成用户所期望的接口。

这就好比你家墙上有一个电源三相插孔,但是插孔的孔距之间太小。你的电器三相插头插脚距太大的插不进去,或许你还有个两相的插头,或许你还有条USB线和type-C线,这些都没法插到三相接口里。于是你买了个插脚适合插到你墙上的排插,然后这个排插是这些年新出的,USB也能插。于是你把你的三相插头,两相插头,USB线,type-c线都插到排插上。实际上就是间接地连在了你墙壁上的三相插孔上。

没错,适配器要做的就是这么回事。

有些书也把适配器模式分为:类的适配器模式,对象的适配器模式,接口的适配器模式

转载于:https://www.cnblogs.com/lijintao1025/p/8522026.html

你可能感兴趣的文章
linux sort按照指定列排序
查看>>
怎么了解某一研究领域的总体发展趋势
查看>>
【学习笔记】彻底理解JS中的this
查看>>
Land of Farms HDU - 5556 二分图匹配
查看>>
Java 入门
查看>>
基于WDF的PCI/PCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)
查看>>
团队作业进度记录2
查看>>
MyBatis 使用Generator自动生成Model , Dao, mapper
查看>>
FATAL ERROR: JS Allocation failed - process out of memory
查看>>
Spring事务梳理
查看>>
垃圾回收机制
查看>>
项目Beta冲刺 随笔集合
查看>>
解决eclipse在tomcat发布web项目时明明已经存在相应的jar包却报类找不到的问题
查看>>
同级css渲染顺序问题
查看>>
CocosIDE导出Android APK的注意事项
查看>>
C++各大有名科学计算库(转)
查看>>
基于QT和OpenCV的人脸检測识别系统(2)
查看>>
(转)视频监控相关文章
查看>>
Python异常处理体系
查看>>
centos7.0 增加/usr分区的容量减少home分区的大小
查看>>