特点:将各种截然不同的函数接口封装成统一的API。
应用:PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使不同的数据库操作,统一成一样的API。类似的场景还有cache适配器,可以将memcache,redis,file,apc等不同的缓存函数,统一成一致。
#例如:封装一个缓存类,它支持 redis 和 memcache,只需切换使用时只需修改相关配置就能实现切换了,而不需要修改大量的代码。
#减少代码间的耦合,可以方便增减需要实现的类。
# 适配器模式
#定义一个缓存类
interface Cache
{
public function connect();
public function set($key,$value,$time=0);
public function get($key);
public function del($key);
public function close();
}
# 使用 redis 做为缓存
class Rediss implements Cache
{
private $redis;
public function __construct()
{
$this->connect();
}
public function connect()
{
$this->redis = new Redis();
return $this->redis->connect('127.0.0.1','6379');
}
public function set($key,$value,$time=0)
{
if($time==0){
return $this->redis->set($key,$value);
}else{
return $this->redis->setex($key,$time,$value);
}
}
public function get($key)
{
return $this->redis->get($key);
}
public function del($key)
{
return $this->redis->delete($key);
}
public function close()
{
return $this->redis->close();
}
}
#使用 memcache 做为缓存
class Memcaches implements Cache
{
private $memcache;
public function __construct()
{
$this->connect();
}
public function connect()
{
$this->memcache = new Memcache();
return $this->memcache->connect('127.0.0.1','11211');
}
public function set($key,$value,$time=0)
{
return $this->memcache->set($key,$value,false,$time);
}
public function get($key)
{
return $this->memcache->get($key);
}
public function del($key)
{
return $this->memcache->delete($key);
}
public function close()
{
return $this->memcache->close();
}
}
#调用
if($cache_config == 'redis'){
# 使用 redis
$cache = new Rediss();
}else{
# 使用 memcache
$cache = new Memcaches();
}
$cache->set('key','value');
$cache->get('key'));
$cache->del('key');
$cache->close();
文章评论