介绍
适配器模式(Adapter Pattern)是为了解决两个接口不兼容的,属于结构型模式,由单一的类来连接两个接口,实现功能的融合。
处理文件实例
现有两个文件处理类,一个是 Notepad 可以处理 php 文件,一个是 Phpstorm 除了可以处理 php 文件,还可以复查代码、使用Git,我们可以使用 Notepad 写 代码,phpstorm 执行其他操作,客户端只需要选择要执行的操作,如果 Notepad 无法执行,将由适配器调用 phpstorm 类完成操作。
<?php
interface AdvancedIde
{
public function codeGit();
public function codeReview();
}
class Phpstorm implements AdvancedIde
{
public function codeGit()
{
return '写完可以使用Git版本控制系统更新代码';
}
public function codeReview()
{
return '写完可以使用代码复查功能检查';
}
}
interface NormalIde
{
public function write($afterSave);
}
class Notepad implements NormalIde
{
public function write($afterSave)
{
$adapter = new NormalIdeAdapter();
$afterAction = $adapter->write($afterSave);
echo 'IDE可以写代码,'.$afterAction;
}
}
class NormalIdeAdapter implements NormalIde
{
protected $ide;
protected $notepad_action = ['write'];
protected $phpstorm_action = ['git','review'];
public function ideAdapter($ide)
{
return new $ide;
}
public function write($afterSave)
{
$this->ide = in_array($afterSave,$this->notepad_action) ? 'Notepad' : 'Phpstorm';
$ide = $this->ideAdapter($this->ide);
$afterSaveAction = 'code' . $afterSave;
return call_user_func([$ide,$afterSaveAction]);
}
}
$normalIde = new Notepad();
$normalIde->write('Review'); //复查代码
$normalIde->write('Git'); //提交代码
总结
适配器模式适合于已经运行的项目中,作为兼容不同接口的存在,可以方便的扩展原有接口实现功能的新增,但适配器过多会使系统变得凌乱,因为从代码层面看调用的是A接口,内部被适配器改成了对B接口的实现,会影响代码的阅读和理解,所以对于类扩展最好的方式还是重构。
网友评论