适配器模式
适配器模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起敢做的两个类能够在一起工作。
适配器模式的用途:
用电器做例子,笔记本电脑的插头一般是三相的,即除了阳极,阴极外,还有一个地级,而有些地方的电源插座只有两级,没有地级,电源插座与笔记本的电脑插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的装换器(适配器)就能解决此问题,而这正是本模式所做的事情。简单地说,就是当你发现你的类实现接口的时候,只实现了一部分的方法,而没有另一部分的方法,这个类就相当于你的插头,而要实现的接口相当于是插座,你的插头只有两个头,而插座有三个头。这个时候,你就要有一个装换器了,也就是适配器,他能将两头的变成三头的,转换的方式就是你把二头的插到适配器上,然后适配器再用自己的三头插到插座上,也就是说,假如你的两个头就相当于两个方法,你把它插到装换器上,装换器自带一个头,也就是一个方法,这样就行了。
适配器模式的结构:
类的适配器模式;
目标角色:
public interface Target { /** * 这是源类Adaptee也有的方法 */ public void sampleOperation1(); /** * 这是源类Adapteee没有的方法 */ public void sampleOperation2(); }
源角色:
public class Adaptee { public void sampleOperation1(){} }
适配器角色:
public class Adapter extends Adaptee implements Target { /** * 由于源类Adaptee没有方法sampleOperation2() * 因此适配器补充上这个方法 */ @Override public void sampleOperation2() { //写相关的代码 } }
public interface Target { /** * 这是源类Adaptee也有的方法 */ public void sampleOperation1(); /** * 这是源类Adapteee没有的方法 */ public void sampleOperation2(); }
public class Adaptee { public void sampleOperation1(){} }
public class Adapter { private Adaptee adaptee; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } /** * 源类Adaptee有方法sampleOperation1 * 因此适配器类直接委派即可 */ public void sampleOperation1(){ this.adaptee.sampleOperation1(); } /** * 源类Adaptee没有方法sampleOperation2 * 因此由适配器类需要补充此方法 */ public void sampleOperation2(){ //写相关的代码 } }