Java设计模式中的适配器模式
作者:Mu_Mu是一只小白
这篇文章主要介绍了Java设计模式中的适配器模式, 适配器模式是将一个类的接口适配成用户所期待的,一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中,需要的朋友可以参考下
适配器模式
将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
使用场景:
1)系统需要使用现有的类,但现有的类却不兼容。
2)需要建立一个可以重复使用的类,用于一些彼此关系不大的类,并易于扩展,以便于面对将来会出现的类。
3)需要一个统一的输出接口,但是输入类型却不可预知。
角色:
- Source:需要被适配的类、接口、对象,即Datas。
- Destination:需要得到的类,Source通过适配得到的类对象,也就是我们期待得到的接口。
- Adapter:适配器类,协调Source和Destination,使两者能够协同工作。
共有两类适配器模式:
- 对象适配器模式: 在这种适配器模式中,适配器组合一个被适配类的实例。在这种情况下,适配器调用该实例方法并对方法进行适配
- 类适配器模式: 这种适配器模式下,适配器继承需要自已适配的类。
模拟场景
家用电压为220v而手机充电器大概在5v,需要一个适配器去适配输入电压将220v变为5v。
类适配器模式
被适配的类
/** * @Description source类,需要被适配。 */ public class AC220 { public int output220(){ //输出220v电压 return 220; } }
目标类:
/** * @Description 目标类输出5v电压 */ public interface OP5 { int output5v(); }
适配类:
public class PowerAdapter extends AC220 implements OP5{ @Override public int output5v() { System.out.println("适配5v开始"); int i = output220(); return i/44; } }
测试类:
@Test public void testClassAdapt(){ PowerAdapter powerAdapter = new PowerAdapter(); System.out.println("适配后的输出:"+powerAdapter.output5v()); }
测试结果
得到5v输入电压。
由于java是单继承,所以这种通过继承被适配类的方式不太灵活,而且继承会让适配器暴露出被适配类的方法。
对象适配器模式
只有适配器类不同
public class PowerAdapter2 implements OP5 { public PowerAdapter2(AC220 ac220) { this.ac220 = ac220; } private AC220 ac220; @Override public int output5v() { System.out.println("适配5v开始"); int i = ac220.output220(); return i/44; } }
测试类:
@Test public void testObjAdapt(){ PowerAdapter2 powerAdapter = new PowerAdapter2(new AC220()); System.out.println("适配后的输出:"+powerAdapter.output5v()); }
测试结果
结果一致
这种模式和装饰者模式有点类似,但是装饰者是为了去扩展被装饰者的功能,并且使用者无法感觉到方法被装饰,适配器模式主要为了更好的兼容和扩展,使用者能感受到适配器的存在。
到此这篇关于Java设计模式中的适配器模式的文章就介绍到这了,更多相关Java适配器模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!