适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。
主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。
JAVA应用:
javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
org.springframework.aop.framework.adapter.AdvisorAdapter
org.springframework.web.servlet.HandlerAdapter
第一种通过继承实现
public interface Target { void request(); }
public class ConcreteTarget implements Target { @Override public void request() { System.out.println("concreteTarget目标方法"); } }
public class Adaptee { public void adapteeRequest(){ System.out.println("被适配者的方法"); } }
public class Adapter extends Adaptee implements Target{ @Override public void request() { //... super.adapteeRequest(); //... } }
public class Test { public static void main(String[] args) { Target target = new ConcreteTarget(); target.request(); Target adapterTarget = new Adapter(); adapterTarget.request(); } }
第二种通过组合实现
public interface Target { void request(); }
public class ConcreteTarget implements Target { @Override public void request() { System.out.println("concreteTarget目标方法"); } }
public class Adaptee { public void adapteeRequest(){ System.out.println("被适配者的方法"); } }
public class Adapter implements Target{ private Adaptee adaptee = new Adaptee(); @Override public void request() { //... adaptee.adapteeRequest(); //... } }
public class Test { public static void main(String[] args) { Target target = new ConcreteTarget(); target.request(); Target adapterTarget = new Adapter(); adapterTarget.request(); } }