用于学习的php适配器模式
<?php
/**
* 适配器模式
* 使用场景:在需求一直变更的情况下,为实现需求需要重复对原始类进行扩展、修改操作,代码维护繁杂;
* 通过适配器模式将需要新增的扩展重新转换成一个新的泪,用于接口调用,避免反复的重复修改原始类;
*/
//原抽象类
abstract class Toy
{
public abstract function a();
public abstract function b();
}
//继承使用抽象类的实物类
class Bus extends Toy
{
public function a(){
echo 'a';
}
public function b(){
echo 'b';
}
}
//继承使用抽象类的实物类
class car extends Toy
{
public function a(){
echo 'a';
}
public function b(){
echo 'b';
}
}
//后续需要新增的接口
interface R
{
public function c();
public function d();
}
//后续需要新增的接口
interface P
{
public function e($type = 0);
}
//适配器 将原类转换成一个可以和接口兼容的类
class R1 implements R{
private $val;
public function __construct(Toy $name)
{
$this->val = $name;
}
public function c(){
$this->val->a();
}
public function d(){
$this->val->b();
}
}
//适配器 将原类转换成一个可以和接口兼容的类
class P1 implements P
{
private $val;
public function __construct(Toy $name)
{
$this->val = $name;
}
public function e($type = 0)
{
if($type){
$this->val->a();
}else{
$this->val->b();
}
}
}
//测试
class Test
{
public function run(){
$vb = new Bus();
$vr = new R1($vb);
$vr->c();
$vp = new P1($vb);
$vp->e(0);
}
}
//实例化测试类
$test = new Test();
$test->run();