适配器模式

首先,业务场景如下:

1.本公司的设备管理平台(实现设备控制接口,有开关功能)

2.需要接入东方生态的设备管理平台(同样设备控制平台有开关功能,但是方法不一致)

业务需求如下:

全部用本公司的接口方法实现对设备的控制

UML图设备如下:

 

实现步骤如下:

1.写自己的设备接口

/**
 * 本公司自己的设备控制接口
 * Interface Device
 */
interface Device
{
    public function open();
    public function close();
}

2. 写自己公司的设备管理类

/**
 * 本公司自己的设备管理类
 * Class ZNZG
 */
class ZNZG implements Device
{
    public function open()
    {
        echo '中农智冠设备启动<br/>';
    }

    public function close()
    {
        echo '中农智冠设备停止<br/>';
    }
}

3.东方生态的设备管理类(方法与本公司的不一致)

/**
 * 东方生态的设备管理类
 * Class DFST
 */
class DFST
{
    public function start()
    {
        echo '东方生态设备启动',PHP_EOL;
    }

    public function stop()
    {
        echo '东方生态设备停止',PHP_EOL;
    }
}

4. 写东方生态的设备适配器

/**
 * 东方生态的适配器
 * Class AdapterDFST
 */
class AdapterDFST implements Device
{
    private $obj;
    public function __construct(DFST $obj)
    {
        $this->obj = $obj;
    }

    public function open()
    {
        $this->obj->start();
    }

    public function close()
    {
        $this->obj->stop();
    }
}

5. 实现代码如下:

$device = new ZNZG();
$device->open();
$device->close();

echo PHP_EOL,'***********************华丽的分割线************************',PHP_EOL;

$device = new AdapterDFST(new DFST());
$device->open();
$device->close();

6. 最终执行结果如下:

 

如果再要新接入一家公司的设备,也是一样的,需要增加一个适配器类,一个设备本身的控制类。

 

备注:

还可以再加入一个东方生态的设备控制接口,然后让东方生态的设备控制类实现自己公司的设备控制接口。这个就看具体需求了

posted @ 2018-06-14 18:58  宫丫  阅读(200)  评论(0编辑  收藏  举报