适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
组成结构
- 客户 (Client):客户类。
- 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
- 适配者(Adaptee):需要适配的类或适配者类。
- 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
举个例子:
电脑的电源是两孔的,现在墙上的插座是三孔,这时就需要一个三控插座转两孔插座的转接器
分析:
三孔插座是目标接口
二孔插座是适配者
三控转两孔转接器是适配器
上代码:
三控插座
package com.example.adapter;
/**
* 三控插座
*/
public class SocketThree {
public void insert(ThreeToTwoAdapter threeToTwoAdapter){
threeToTwoAdapter.handRquest();
}
}
二孔插座
package com.example.adapter;
/**
* 二孔插座想插入三控插座但是插入不了
*/
public class SocketTwo {
public void request(){
System.out.println("我是二孔插座,我已经通过适配器插入三控插座");
}
}
适配器接口
package com.example.adapter;
/**
* 接口三控转两孔转换器抽象
*/
public interface ThreeToTwoAdapter {
void handRquest();
}
适配器接口实现
package com.example.adapter;
/**
* 需要连接二孔插座和三孔插座的适配器
*/
public class ThreeToTwoAdapterImpl implements ThreeToTwoAdapter {
private SocketTwo socketTwo;
public ThreeToTwoAdapterImpl(SocketTwo socketTwo) {
this.socketTwo = socketTwo;
}
@Override
public void handRquest() {
socketTwo.request();
}
}
测试类
package com.example.adapter;
public class Test {
public static void main(String[] args) {
//两孔插座
SocketTwo socketTwo = new SocketTwo();
//三控插座
SocketThree socketThree = new SocketThree();
//两孔插座连接适配器
ThreeToTwoAdapterImpl threeToTwoAdapterImpl = new ThreeToTwoAdapterImpl(socketTwo);
//将配器插入三控插座
socketThree.insert(threeToTwoAdapterImpl);
}
}
测试结果: