Adapter Pattern
The Adapter Pattern converts the interface of a class into another interface the clients expect. Adapter lets classes work together that coudn’t otherwise because of incompatible interfaces.
Adapter Pattern Diagram

Implementation
We have Duck Target interface:
public interface Duck {
public void quack();
public void fly();
}Then, we have Adaptee interface
public interface Turkey {
public void gobble();
public void fly();
}Target Concrete instance:
public class MallardDuck implements Duck {
public void quack() {
System.out.println("Quack);
}
public void fly() {
System.out.println("I'm flying");
}
}Adaptee Concrete instnace:
public class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Gobble");
}
public void fly() {
System.out.println("I'm flying a short distance");
}
}Creating Adapter that adapts Adaptee instance to Target instance:
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
public void quack() { turkey.gobble() };
public void fly() {
for (int i=0; i < 5; i++) {
turkey.fly();
}
}
}Testing:
public class DuckTestDrive {
public static void main(String[] args) {
Duck duck = new MallardDuck();
Turkey turkey = new WileTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
duck.quack();
duck.fly();
turkeyAdapter.quack();
turkeyAdapter.fly();
}
}Real Example
public class EnumerationIterator implements Iterator<Object> {
/* ? Generic type
It can hold any of these:
Enumeration<String>
Enumeration<Integer>
Enumeration<Object>
Enumeration<SomeClass> */
Enumeration<?> enumeration;
public EnumerationIterator(Enumeration<?> enumeration) {
this.enumeration = enumeration;
}
public boolean hasNext() {
return enumeration.hasMoreElements();
}
public Object next() {
return enumeration.nextElement();
}
public void remove() {
throw new UnsupportedOperationException();
}
}public class EnumerationIteratorTestDrive {
public static void main (String args[]) {
Vector<String> v = new Vector<String>(Arrays.asList(args));
/* Adapt Enumerator to Iterator */
Iterator<?> iterator = new EnumerationIterator(v.elements());
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}