php设计模式入门适配器模式实例教程

发布时间:2019-07-29编辑:脚本学堂
有关php设计模式中适配器模式的例子,适配器模式作为php设计模式中最常用的一种模式,其适用性与实现思路是怎么样的,一起来学习下。

适配器模式是php设计模式中的一个常用的模式。

一、适配器模式的作用
 
将一个类的接口转换成客户希望的另外一个接口。
适配器模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作

二、适配器模式的适用性
1、使用一个已经存在的类,而它的接口不符合你的需求
2、创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
3、使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)
应用举例,例如PHP的数据库操作有mysql、Mssql、PDO等,可以用适配器模式统一成一致。
类似的场景还有cache适配器,将memcache、redis、file、apc等不同的缓存函数,统一成一致。

三、php适配器模式的入门实例

例子,php适配器模式
 

复制代码 代码示例:
<?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
 * 继承接口 实现接口方法
 */ www.jb200.com
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();
?>