3.1适配器模式
适配器模式将某个类的接口转换成客户端期望的另外一个接口,主要目的是兼容性,让原本呢因接口不匹配不能一起工作的两个类可以协同工作,别名为包装器。
适配器有分为三类:类适配器、对象适配器、接口适配器
工作原理:
- 将一个类转换成另一个接口,让原本不兼容的类兼容
- 从用户角度看不到被适配者,是解耦的
- 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
适配器角色:
- Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
- Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系
- Adaptee(被适配类):它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。
类适配器
-
Target
public interface Target { //定义一个接口方法,手机充电器输出5v电压 int output5v(); }
-
Adaptee
public class Adaptee220v { public int output220v(){ System.out.println("输出220V电压"); return 220; } } public class Adaptee110V { public int output110v(){ System.out.println("输出110v电压"); return 110; } }
-
Adapter
public class Adapter110vTo5v extends Adaptee110V implements Target { @Override public int output5v() { int output110v = super.output110v(); System.out.println(String.format("适配器输入电压: %d;输出电压: %d",output110v,output110v/22)); return output110v/22; } } public class Adapter220vTo5v extends Adaptee220v implements Target { @Override public int output5v() { int output220v = super.output220v(); System.out.println(String.format("适配器输入电压: %d;输出电压: %d",output220v,output220v/44)); return output220v/44; } }