适配器(Adapter)模式

定义

通过适配器模式,将一个接口转化为所期待的接口.

通俗的讲,将一个与自己接口定义不一定的类,通过包装,将不兼容的类转成与接口一致

适配器模式分为对象适配器,类适配器

适配器模式中主要角色

  • 目标(Target)角色:定义客户端使用的相关的接口
  • 源(Adaptee)角色:需要进行适配的接口
  • 适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类

实例

类适配器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
/**
* Created by PhpStorm.
* User: Livfer
* Desc:
* Date: 2019/9/16
* Time: 11:00
*/

/**
* 类适配器
* Interface Target
*/
interface Target
{
public function confirmOrder();
public function calc();
}

/**
* 适配器原角色
* Class Adaptee
*/
class Adaptee
{
public function confirmOrder()
{
return "适配器下单";
}
}

/**
* 通过继承原角色进行适配可用的和自定义不同的
* Class Adapter
*/
class AdapterA extends Adaptee implements Target
{
/**
* 自定义不同的
* @return string
*/
public function calc()
{
return "适配后的角色进行计算价格";
}
}

class AdapterB extends Adaptee implements Target
{
public function confirmOrder()
{

}

public function calc()
{

}
}

$adapter = new AdapterA();
$adapter->confirmOrder();
$adapter->calc();

$adapterB = new AdapterB();
$adapterB->confirmOrder();
$adapterB->calc();

对象适配器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/**
* Created by PhpStorm.
* User: Livfer
* Desc:
* Date: 2019/9/16
* Time: 11:07
*/

interface TargetA
{
public function confirm();

public function calc();
}

/**
* 假设此类是外来的类
* Class Adapter
*/
class Adapter
{
public function confirmOrder()
{
return "外来的确认订单";
}
}


class AdapteeA implements TargetA
{
protected $adapter;

public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}

/**
* 将外来的,不统一的确认订单方法,转化为统一接口的方法
* @return string
*/
public function confirm()
{
return $this->adapter->confirmOrder();
}

public function calc()
{

}
}

$adapter = new AdapteeA(new Adapter());
$adapter->confirm();
$adapter->calc();