适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能,将另一个不兼容的接口转化为可接收的接口,是一种行为型模式。
一、UML类图
形象比喻
UML类图
本文以220v电压转为5v给手机充电为例介绍适配器模式。Target相当于5V电压,Adapter就是电源适配器,Adaptee是需要被适配的220V电压。
二、代码示例
// 220v电源,被适配类
public class Voltage220V {
public int output220V() {
System.out.println("原始电压220v");
return 220;
}
}
下面是适配器类
public class ChargeAdapter extends AbsVoltage {
private Voltage220V voltage220V;
public ChargeAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
public int output5V() {
int srcV = voltage220V.output220V();
int dstV = srcV / 44; // 减压
return dstV;
}
}
要想适配器工作,需要让其持有一个220V的电源,以及实现一个220->5的接口方法,代码如下。
public interface IVoltage {
int output5V();
int output10V();
}
// 其实只用一个IVoltage接口就可以了,这里加一层抽象类,提供一些默认的实现
public class AbsVoltage implements IVoltage {
public int output5V() {
return 0;
}
public int output10V() {
return 0;
}
}
手机类和客户类如下
public class Phone {
void charge(IVoltage voltage) {
// 手机的充电方法调用5V充电器的放电方法
if (voltage.output5V() == 5) {
System.out.println("电压为5V,可以正常充电");
} else if (voltage.output5V() > 5) {
System.out.println("电压高于5V,不能充电");
}
}
}
public class Client {
public static void main(String[] args) {
ChargeAdapter adapter = new ChargeAdapter(new Voltage220V());
Phone phone = new Phone();
// 手头没有5V的电源,只有220V的电源和一个电源适配器ChargeAdapter
phone.charge(adapter);
}
}
运行结果,
原始电压220v
电压为5V,可以正常充电
Process finished with exit code 0
三、参考
- https://www.runoob.com/design-pattern/adapter-pattern.html
- https://www.youtube.com/watch?v=1xWjqXj2gl0
设计模式系列博文导航
一、创建型 - 5种
原型模式(Prototype Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
工厂模式(Factory Pattern)
单例模式(Singleton Pattern)
助记语:原抽建工单
二、结构型 - 8种
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
适配器模式(Adapter Pattern)
外观模式(Facade Pattern)
过滤器模式(Filter/Criteria Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
助记语:想呆室外,过桥组装
三、行为型 - 11种
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
中介者模式(Mediator Pattern)
迭代器模式(Iterator Pattern)
观察者模式(Observer Pattern)
策略模式(Strategy Pattern)
状态模式(State Pattern)
备忘录模式(Memento Pattern)
模板方法模式(Template Pattern)
访问者模式(Visitor Pattern)
助记语:责令解中谍,观测状被模仿