美文网首页PHP开发PHP经验分享程序员
编程中的设计模式之适配器模式

编程中的设计模式之适配器模式

作者: phpworkerman | 来源:发表于2020-08-08 11:22 被阅读0次
介绍

适配器模式(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接口的实现,会影响代码的阅读和理解,所以对于类扩展最好的方式还是重构。

相关文章

网友评论

    本文标题:编程中的设计模式之适配器模式

    本文链接:https://www.haomeiwen.com/subject/pvvcdktx.html