【设计模式】适配器模式

结构型设计模式: 适配器模式 adapter

将一个类的接口转换成客户希望的另一个接口. 适配器模式使原本由于接口不兼容不能一起工作的那些类可以一起工作

两种形式

  • 继承式
  • 组合式
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
<?php

interface Standard {
public function output();
}

class ChinaStandard implements Standard
{
public function output()
{
echo '220V' . PHP_EOL;
}
}

class Adapter implements Standard
{
protected $china_standard;

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

public function output()
{
$this->china_standard->output();
}
}

困惑点: 感觉装饰器模式和适配器模式有点像?

  • 装饰器模式: 不改变原有的功能, 不对原有的功能加限制, 不需要原有功能对新功能提供任何帮助, 仅在原有功能上添加新的功能
  • 适配器模式: 将一个类的接口转换成客户希望的另一个接口. 适配器模式使原本由于接口不兼容不能一起工作的那些类可以一起工作

适配器模式与装饰器模式的区别

装饰器与适配器都有一个别名叫做 包装模式(Wrapper),它们看似都是起到包装一个类或对象的作用,但是使用它们的目的很不一一样。适配器模式的意义是要将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的。
而装饰器模式不是要改变被装饰对象的接口,而是恰恰要保持原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方式而提升性能。所以这两个模式设计的目的是不同的。

适配器模式,装饰模式,代理模式异同,别再说看着都一样了!