文章目录
介绍
描述
适配器模式设计模式属于结构型模式,是作为两个不兼容的接口之间的桥梁,即将一个现存的接口适配为期待的另一个接口。
特点
优点:适配器模式可以让两个没有任何关系得类在一起运行、提高了类的复用、增加了类的透明度、灵活性好。
缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。
适用
-
需要修改了一个已经投产中的接口。
-
系统需要使用现有的类,而此类的接口不符合系统的需要。
-
适配器模式最好在详细设计不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题。
适配器
实现
提供一个设备 Device 接口和一个实现了 Device 接口的实体类 DeviceUse。同时提供一个电压Voltage 接口和实现了 Voltage 接口的实体类。该类可以提供 5V 和 220V 的电压。要想让 DeviceUse 使用特定电压,我们需要创建一个实现了 Device 接口的适配器类 DeviceVoltageAdapter ,并使用 Voltage 对象来获取电压。DeviceUse 使用适配器类 DeviceVoltageAdapter 传递所需的电压值,不用明确具体提供电压的类。
适配器模式(类适配器)
第一步:创建一个电压Voltage 接口,并提供实现类Voltage220V、Voltage5V分别提供220V 和 5V电压。
public interface Voltage {
public void get5V();
public void get220V();
}
// 提供5V电压
public class Voltage5V implements Voltage {
@Override
public void get5V() {
System.out.println("提供 5 V 电压");
}
@Override
public void get220V() {
}
}
// 提供220V电压
public class Voltage220V implements Voltage {
@Override
public void get5V() {
}
@Override
public void get220V() {
System.out.println("提供 220 V 电压");
}
}
第二步:提供设备Device接口。
public interface Device {
public void use(String vo);
}
第三步:创建实现了 Device 接口的适配器类DeviceVoltageAdapter 。
public class DeviceVoltageAdapter implements Device{
Voltage voltage;
public DeviceVoltageAdapter(String vo) {
if (vo.equals("5V")){
voltage = new Voltage5V();
}else {
voltage = new Voltage220V();
}
}
@Override
public void use(String vo) {
if (vo.equals("5V")){
voltage.get5V();
}else {
voltage.get220V();
}
}
}
第四步:创建实现了 Device 接口的实体类 DeviceUse。
public class DeviceUse implements Device{
DeviceVoltageAdapter adapter;
@Override
public void use(String vo) {
adapter = new DeviceVoltageAdapter(vo);
adapter.use(vo);
}
}
第五步:测试。
public static void main(String[] args) {
Device device = new DeviceUse();
device.use("5V"); // 提供 5 V 电压
device.use("220V"); // 提供 220 V 电压
}
适配器模式(接口适配器)
public interface Charge {
// 手机充电
void PhoneCharge();
// 电脑充电
void ComputerCharge();
}
// 提供适配器类 抽象类
public abstract class ChargeAdapter implements Charge {
// 默认空实现
public void PhoneCharge() {
}
public void ComputerCharge() {
}
}
//
public class Test {
public static void main(String[] args) {
// 具体实现
ChargeAdapter adapter = new ChargeAdapter(){
@Override
public void PhoneCharge() {
System.out.println("手机充电");
}
@Override
public void ComputerCharge() {
super.ComputerCharge();
}
};
// 调用
adapter.PhoneCharge();
}
}