适配器设计模式

作者: wudanyang | 来源:发表于2017-12-05 18:55 被阅读32次

什么是适配器设计模式

举个例子,手机电池是没法直接用插排充电的,所以需要一个充电器来将电流转换一下,这个充电器就是代码里面的 适配器模式

为什么要用适配器设计模式

可以在不改变原有类的功能的同时,满足客户的需求。

何时使用适配器设计模式

当原有类不符合客户的需求并且不能或不想修改原有类的情况下,可以考虑做一个适配器来适应客户的需求。

如何使用适配器设计模式

以下代码用手机充电举例,插排的电压为 220v,但是手机只能接收 5v 的电压,所以写了一个 Charger 充电器,来将 220v 的交流电转为 5v 的手机电压。

类适配器

php 中类适配器模式使用了继承类和实现接口两种方式来模拟多继承。


// 充电器例子

// 插排
class Board
{
    protected $volt = 220;
    public function providePower()
    {
        echo $this->volt.' volt power charging'.PHP_EOL;
    }
}

// 充电器接口规范
interface ChargerInterface
{
    public function charge();
}

// 继承具体的插排类,并且实现充电器接口
class Charger extends Board implements ChargerInterface
{
    // 充电方法
    public function charge()
    {
        $this->volt = 5;
        return $this->providePower();
    }
}

// 手机类
class Mobile
{
    // 充电
    public function charge()
    {
        $charge = new Charger();
        $charge->charge();
    }
}

$mobile = new Mobile();
$mobile->charge();

对象适配器

对象适配器,是通过委托的形式来实现的,将具体功能委托给类实例。

// 插排
class Board
{
    public $volt = 220;
    public function providePower()
    {
        echo $this->volt.' volt power charging'.PHP_EOL;
    }
}

// 充电器接口规范
interface ChargerInterface
{
    public function charge();
}

// 继承具体的插排类,并且实现充电器接口
class Charger implements ChargerInterface
{
    private $board;

    public function __construct(Board $board)
    {
        $this->board = $board;
    }

    // 充电方法
    public function charge()
    {
        $this->board->volt = 5;
        $this->board->providePower();
    }
}

// 手机类
class Mobile
{
    // 充电
    public function charge()
    {
        $charge = new Charger(new Board());
        $charge->charge();
    }
}
$mobile = new Mobile();
$mobile->charge();

类图

类适配器模式 对象适配器模式

相关文章

网友评论

    本文标题:适配器设计模式

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