设计模式——结构型模式(一)

Adapter(适配器模式)

目标

将一个类的接口转换成客户所希望的另一个接口,范围从单纯的改变接口的名称直到适配、甚至添加额外的方法以便满足完全没有联系的接口方法。

结构

对象适配器结构图

对象适配器依赖于对象的组合,主要是依靠Adapter类的代理,将对于Adapter的requset与special request转发到Target类与Adaptee中去。

类适配器结构图

类适配器依赖于多重继承(java中即是接口),将相应需要提供的方法加在Target类上。

协作

时序图

如图所示,Client类调用Adapter类上的某些方法,以实现相应的request或者是specailRequset方法。

适用情形

  1. 存在一个想要使用的但是接口并不满足你的需求的一个类的时候;

  2. 你想创建一个可以复用的类,这个类可以与其他不相关的或者不可预见的类协同工作;

  3. 你想要使用一些子类,但是你只想适配它的父类方法。(仅适用于对象适配器中)

参与者

  • Target

    定义用户原有的各种业务代码与功能。

  • Client

    与Target接口进行交流。

  • Adaptee

    一个已经存在并且需要适配才能正常工作的一个接口。

  • Adapter

    对Adatper的接口与Target接口进行适配。

效果

  1. Adapter的适配程度

    Adapter的工作量取决于两个接口的相似程度,工作范围从简单的改变操作名到支持完全不同的操作。

  2. 可插入的Adapter

    可插入的适配器(暂时还看不懂)

代码实例

  1. 对象适配器
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
class Socket{
public void twoPinPlug() {}
}
interface Usb{
public void charge();
}
class MixSocket{
private Socket socket;
private Usb usb;
public MixSocket() {
socket = new Socket;
usb = new usb {
@Override
public void charge() {}
};
}
public void twoPinPlug() {
socket.twoPinPlug();
}
public void usb() {
usb.charge();
}
}
public class User{
private MixSocket socket;
public User() {
socket = new MixSocket();
}
public static void main(String args[]) {
User user = new User();
user.socket.twoPinPlug();
user.socket.usb();
}
}
  1. 类适配器
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
class Socket{
public void twoPinPlug() {}
}
interface Usb{
public void charge();
}
class MixSocket extends Socket implements Usb{
public MixSocket() {}
@Override
public void charge() {}
}
public class User{
private MixSocket socket;
public User() {
socket = new MixSocket();
}
public static void main(String args[]) {
User user = new User();
user.socket.twoPinPlug();
user.socket.usb();
}
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2018 Alex's Blog All Rights Reserved.

Yifeng Tang hält Urheberrechtsansprüche.