适配器模式有什么用?
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作
适用性
1、你想使用一个已经存在的类,而它的接口不符合你的需求
2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)
应用举例,例如PHP的数据库操作有MySQL、Mssql、PDO等,可以用适配器模式统一成一致。类似的场景还有cache适配器,将memcache、redis、file、apc等不同的缓存函数,统一成一致。
接下来我们以数据库操作来举例,为了编辑方便,博主就把代码都写一起了
<?php /** * PHP设计模式之适配器模式实例 * */ /** * 目标角色 * 创建一个接口文件 DataBase.php * 定义一个数据库接口 * 声明方法 */ interface IDataBase { public function connect($host, $user, $passwd, $dbname); public function query($sql); public function close(); } /** * 源角色 */ class Adaptee { /** * 源类含有的方法 */ public function connect($host, $user, $passwd, $dbname) { return 'Adaptee'; } } /** * 类适配器角色 * 创建mysql操作类文件 Mysql.php * 继承接口 实现接口方法 */ class Mysql implements IDataBase { private $_adaptee; function __construct() { $this->_adaptee = new Adaptee(); } public function connect($host, $user, $passwd, $dbname){ /** * code... * 委派调用Adaptee的connect方法 */ $this->_adaptee->connect($host, $user, $passwd, $dbname); //return 'ok'; } public function query($sql){ /** * code... */ return 'ok'; } public function close(){ /** * code... */ return 'ok'; } } /** * 类适配器角色 * 创建mssql操作类文件 Mssql.php * 继承接口 实现接口方法 */ class Mssql implements IDataBase { public function connect($host, $user, $passwd, $dbname){ /** * code... */ return 'ok'; } public function query($sql){ /** * code... */ return 'ok'; } public function close(){ /** * code... */ return 'ok'; } } /** * 类适配器角色 * 创建pdo操作类文件 Pdo.php * 继承接口 实现接口方法 */ class Pdfo implements IDataBase { public function connect($host, $user, $passwd, $dbname){ /** * code... */ return 'ok'; } public function query($sql){ /** * code... */ return 'ok'; } public function close(){ /** * code... */ return 'ok'; } } /** * 使用 * 这样就可以任意的在三种适配器之间进行切换 */ $db = new Mysql(); echo $db->connect('127.0.0.1', 'root', 'root', 'test'); echo $db->query('show databases'); echo $db->close(); ?>
博主也参考了网上一些示例,总觉得写的也不明确,直到写完这篇,博主依旧疑惑。不知道我的理解是否正确,看过之后的朋友还望指点一二。
好了,今儿就到这,更多深入信息可以自己去网上找,或者查看相关书籍
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库
, 对象
, 接口
, 设计模式
, 模式
复用
,以便于您获取更多的相关知识。
时间: 2024-10-18 07:00:46