php-适配器模式实现
概述
适配器模式(Adapter) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
我们这里还是以摩托车制造为例。客户要求生产蓝色和红色的踏板摩托车,除颜色外其他属性都一样。我们先前的工艺是把车身喷漆部分单独视作一个流程,现在考虑到流程优化尝试,我们想把车身喷漆这一流程合并到车身组装环节。但并不想破坏原来的流程,所以我们需要定制两套车身组装标准(新标准基于原有标准的拓展)。此时我们就需要利用适配器模式来实现。具体代码实现如下。
模式结构
类结构型模式
- MotorcycleProduce-摩托组装抽象类:建立摩托组装标准工艺 Target 目标类
- MotocycleProduct 摩托车产品本身
- motorcycleScooter 摩托车组装- Adapter 适配器类
- motorcycleScooterAdapter 摩托车组装-Adaptee 适配者类
对象结构型模式
- MotorcycleProduce-摩托组装抽象类:建立摩托组装标准工艺 Target 目标类
- MotocycleProduct 摩托车产品本身
- motorcycleScooter 摩托车组装- Adapter 适配器类
- motorcycleScooterAdapter 摩托车组装-Adaptee 适配者类
UML图例
类结构型模式
对象结构型模式
代码实例
类结构型模式
<?php
namespace Adapter;
//抽象类-定义生产摩托车流水线标准 Target 目标类
interface MotorcycleProduce
{
//发动机方法
public function addEngine();
//车身方法
public function addBody();
public function addBodyAndSetColor(string $color);
//车轮方法
public function addWhell();
//喷漆方法
public function setBodyColor(string $color);
//获取摩托
public function getMotor();
}
//摩托车产品本身
class MotocycleProduct{
private $motor = [
"engine"=>"",
"body"=>"",
"whell"=>"",
"bodyColor"=>"blue"
];
//新增发动机零部件
public function addEngine($engine){
$this->motor["engine"] = $engine;
}
public function addBody($body){
$this->motor["body"] = $body;
}
public function addWhell($whell){
$this->motor["whell"] = $whell;
}
public function setBodyColor(string $color){
$this->motor["bodyColor"] = $color;