什么是适配器设计模式
举个例子,手机电池是没法直接用插排充电的,所以需要一个充电器来将电流转换一下,这个充电器就是代码里面的 适配器模式
。
为什么要用适配器设计模式
可以在不改变原有类的功能的同时,满足客户的需求。
何时使用适配器设计模式
当原有类不符合客户的需求并且不能或不想修改原有类的情况下,可以考虑做一个适配器来适应客户的需求。
如何使用适配器设计模式
以下代码用手机充电举例,插排的电压为 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();
网友评论