设计模式<结构型> | 适配器模式

适配器模式(Adapter Pattern)

将不兼容的接口转换成可以兼容的接口,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。

结构图:

角色:

  1. 目标(Target),定义把其他类转换为哪种接口。
  2. 源目标(Adaptee),需要被适配的类。
  3. 适配器(Adapter),通过继承或是类关联的方式把源角色转换为目标角色。

适用场景:

  1. 封装有缺陷的接口设计。
  2. 替换依赖的外部系统。
  3. 兼容老版本接口
  4. 适配不同格式的数据

优点:

  1. 符合开闭原则,可以不修改现有客户端代码的情况下在程序中添加新类型的适配器。
  2. 符合单一原则,将接口或数据转换代码从程序主要业务逻辑中分离到适配器中。

缺点

  1. 代码整体复杂度增加,因为需要新增一系列接口和类,有时直接更改服务类使其与其他代码兼容会更简单。

代码(C#)

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

/// <summary>
/// 需要被适配的类
/// </summary>
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("被适配了");
}
}

/// <summary>
/// 适配目标
/// </summary>
public interface ITarget
{
void Request();
}

/// <summary>
/// 接口适配
/// </summary>
public class Adapter : Adaptee, ITarget
{
public void Request()
{
SpecificRequest();
}
}

/// <summary>
/// 组合适配
/// </summary>
public class Adapter2 : ITarget
{
private Adaptee _adaptee;

public Adapter2(Adaptee adaptee)
{
_adaptee = adaptee;
}

public void Request()
{
_adaptee.SpecificRequest();
}
}

最后

代理、桥接、装饰、适配模式的区别

  1. 代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。
  2. 桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。
  3. 装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。
  4. 适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。

设计模式<结构型> | 适配器模式
http://example.com/posts/39554.html
作者
她微笑的脸y
发布于
2023年3月2日
许可协议