适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
我们接下来以一个类要实现List接口中的contains(Object o)为例,虽然只需要这一个方法,但是在实现List接口时,系统告知需要覆写该接口的所有方法,也是代码看起来很臃肿,而且有些不得不覆写的方法还是自己不需要的,该怎么办呢?
package 适配器模式; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /** * 适配器模式 * 方法太多,有很多方法是自己不需要的,显得很凌乱,肿么办? */ public abstract class ListAdapter implements List{ @Override public int size() { return 0; } @Override public boolean isEmpty() { return false; } @Override public boolean contains(Object o) { return false; } @Override public Iterator iterator() { return null; } @Override public Object[] toArray() { return null; } @Override public Object[] toArray(Object[] a) { return null; } @Override public boolean add(Object e) { return false; } @Override public boolean remove(Object o) { return false; } @Override public boolean containsAll(Collection c) { return false; } @Override public boolean addAll(Collection c) { return false; } @Override public boolean addAll(int index, Collection c) { return false; } @Override public boolean removeAll(Collection c) { return false; } @Override public boolean retainAll(Collection c) { return false; } @Override public void clear() { } @Override public Object get(int index) { return null; } @Override public Object set(int index, Object element) { return null; } @Override public void add(int index, Object element) { } @Override public Object remove(int index) { return null; } @Override public int indexOf(Object o) { return 0; } @Override public int lastIndexOf(Object o) { return 0; } @Override public ListIterator listIterator() { return null; } @Override public ListIterator listIterator(int index) { return null; } @Override public List subList(int fromIndex, int toIndex) { return null; } } ------------------------------------------------------ package 适配器模式; /** * 根据需要覆写需要的方法 */ public class Test extends ListAdapter{ @Override public boolean contains(Object o) { return false; } }