Java面试经验第一季之设计模式——适配器模式

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作,目的是消除由于接口不匹配所造成的类的兼容性问题。

举个栗子来说,就是你家墙壁上的插座是个三口的,而你的电扇是两口的,通过转换器插在插座上,你的电扇插在转换器上,就可以享受风扇了。

适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式

类适配器模式

核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里。

模式所涉及的角色有:

●  目标(Targetable)角色:这就是所期待得到的接口。

●  源(Source)角色:现在需要适配的源类。

●  适配器(Adaper)角色:适配器类是本模式的核心。适配器继承源类,实现目标接口。

Java面试经验第一季之设计模式——适配器模式

类的适配器模式


对象的适配器模式

基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。

Java面试经验第一季之设计模式——适配器模式

对象的适配器模式


就是把类的适配器当中的源类Source,由适配器类Adapter继承改成适配器类Wrapper实例化源类Source,然后实现目标接口Targetable,本质区别不大,由原来的继承源类变为持有源类。

接口的适配器模式

接口的适配器模式,稍微有点负责,有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

Java面试经验第一季之设计模式——适配器模式

接口的适配器模式

简单的说,就是在实际开发中,我们也常会遇到这种接口中定义了太多的方法,以致于有时我们在一些实现类中并不是都需要,所以我们采用接口的适配器实现其中一个我们需要的方法就行了。

三种适配器模式的应用场景:

类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。

对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。

接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。

适配器模式的优点

  •   更好的复用性

系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。

  •   更好的扩展性

在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

适配器模式的缺点

过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

猜你喜欢

转载自blog.csdn.net/qq_41552245/article/details/87867508