适配器模式定义:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容。
现实中的例子:电源适配器(充电器)。由于设备的不同,输入电流电压有不同的标准,但是我国的家用电压是220V标准,所以需要经过电源适配器对电流电压进行转换才能安全充电。
适配器模式有两种形式:
-
对象适配器:适配器实现(implement)目标接口,且适配器类中有被适配对象的引用
-
类适配器: 适配器实现(implement)目标接口,适配器类直接继承被适配对象的类
适配器适配过程:从用户的角度看不到被适配者,是解耦的。
-
用户调用适配器转化出来的目标接口
-
适配器再调用被适配者的相关接口方法
-
用户收到反馈结果,感觉只是和目标接口交互
类图:对象适配器
代码示例:
|
1
2
3
4
5
6
7
8
|
//标准家用插座public class NormalSocket
{ private final int v
= 220; public int out(){ return v; }} |
|
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
|
//小米手机public class MIMobile
{ private final String
name = "小米手机"; private byte power; public synchronized void charge(USBSocket
electrictIn){ if (electrictIn==null)
{ return ; } if(electrictIn.out()==5){ new Thread(){ @Override public void run()
{ while(power
< 100){ power++; System.out.println("正在充电中,当前电量-------:
"+power); try { Thread.sleep(1000); } catch (InterruptedException
e) { System.out.println("充电器烧了,断开电源"); return; } } System.out.println("充电完成"); } }.start();; }else { System.out.println("充电保护,断开充电源"); } }} |
|
1
2
3
4
5
|
//USB充电器public interface USBSocket
{ public int out();} |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//小米电源适配器public class MIUSBSocketAdater implements USBSocket
{ private NormalSocket
normalSocket; public MIUSBSocketAdater(NormalSocket
normalSocket) { this.normalSocket
= normalSocket; } @Override public int out()
{ if(normalSocket!=null){ return 5; }else { System.out.println("无电源输入"); return 0; } }} |
|
1
2
3
4
5
6
7
8
|
public class Main
{ public static void main(String[]
args) { MIMobile
mobile = new MIMobile(); NormalSocket
normalSocket = new NormalSocket(); MIUSBSocketAdater
miusbSocketAdater = new MIUSBSocketAdater(normalSocket); mobile.charge(miusbSocketAdater); }} |
2805

被折叠的 条评论
为什么被折叠?



