《设计模式》设计模式的基本原则
《设计模式》单例模式
《设计模式》工厂模式
《设计模式》原型模式
《设计模式》建造者模式
《设计模式》适配器模式
《设计模式》桥接模式
《设计模式》装饰者模式
《设计模式》组合模式
《设计模式》外观模式
《设计模式》享元模式
《设计模式》代理模式
《设计模式》模板方法模式
《设计模式》命令模式
定义:
工作原理:用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法,用户收到反馈结果,感觉只是和目标接口交互。
适配器的实现方式有三类:类适配器模式、对象适配器模式和接口适配器模式。
基本介绍:Adapter
类通过继承 src
类并实现 dst
类接口,从而完成 src->dst
的适配。
以生活中充电器的例子来讲解适配器,充电器本身相当于 Adapter
,220V 交流电相当于 src
,5V 直流电相当于 dst
.
分析的 UML 类图如下所示:
Voltage5V
类
public interface Voltage5V {
int output5V();
}
Voltage220V
类
public class Voltage220V {
public int output220V() {
int src = 220;
System.out.println("电压"+src+"伏");
return src;
}
}
VoltageAdapter
类
public class VoltageAdapter extends Voltage220V implements Voltage5V {
@Override
public int output5V() {
int src = output220V();
int dst = src / 44; //转换成5V
return dst;
}
}
Phone
类
public class Phone {
public void charging(Voltage5V voltage5V) {
if (voltage5V.output5V() == 5) {
System.out.println("电压为5V,可以充电");
} else if (voltage5V.output5V() > 5) {
System.out.println("电压大于5V,不能充电");
}
}
}
Client
类
public class Client {
public static void main(String[] args) {
System.out.println("类适配器模式");
Phone phone = new Phone();
phone.charging(new VoltageAdapter());
}
}
类适配器的注意事项:
src
类时,这就要求 dst
必须是接口,有一定的局限性。src
类的方法在 Adapter
中都会暴露出来,增加了使用成本。src
类,因此可以根据需求重写 src
类的方法,使得 Adapter
的灵活性增强了。基本介绍:其基本思路与类适配器模式相同,只是将 Adapter
类作修改,不是继承 src
类而是持有 src
类的实例以解决兼容性的问题,即:持有 src
类实现 dst
类接口完成 src->dst
的适配。
分析充电器适配的例子,其 UML 类图如下:
VoltageAdapter
类
public class VoltageAdapter implements Voltage5V{
private Voltage220V voltage220V; //关联关系-聚合
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int dst = 0;
if (voltage220V != null) {
int src = voltage220V.output220V();
System.out.println("使用对象适配器,进行适配");
dst = src / 44;
System.out.println("适配完成,输出的电压为"+dst);
}
return dst;
}
}
Client
类
public class Client {
public static void main(String[] args) {
System.out.println("对象适配器模式");
Phone phone = new Phone();
phone.charging(new VoltageAdapter(new Voltage220V()));
}
}
对象适配器的优点:
src
的局限性,也不要求 dst
必须是接口。基本介绍:
SpringMVC 中的处理器适配器 HandlerAdapter
就使用了适配器模式:
HandlerAdpater
作为一个适配器接口,它的实现子类使得每一种 Controller 有对应的适配器实现类SpringMVC
的扩展了三种命名方式是根据 src
以怎样的形式给到 Adapter
来命名:
src
当作类继承src
作为一个对象持有src
作为一个对象实现适配器模式就是将原本不兼容的接口融合到一起工作。