Java Tutorial/Design Pattern/Adapter Pattern
Adapter Pattern Demo
<source lang="java">
class Target {
public void request() { }
} class Adaptee {
public void specificRequest() { System.out.println("Adaptee: SpecificRequest"); }
} class Adapter extends Target {
private Adaptee adaptee; public Adapter(Adaptee a) { adaptee = a; } public void request() { adaptee.specificRequest(); }
} public class SimpleAdapter {
public static void main(String args[]) { Adaptee a = new Adaptee(); Target t = new Adapter(a); t.request(); }
}</source>
Adapter pattern: two interfaces
<source lang="java">
public class TestAdapter {
public static void main(String args[]) { SimpleName aceObject = new SimpleName(); aceObject.setName("A"); FullNameSimpleNameAdapter adapter = new FullNameSimpleNameAdapter(aceObject); System.out.println("Customer"s first name: " + adapter.getFirstName()); System.out.println("Customer"s last name: " + adapter.getLastName()); }
} interface SimpleNameInterface {
public void setName(String n); public String getName();
} class SimpleName implements SimpleNameInterface {
String name; public void setName(String n) { name = n; } public String getName() { return name; }
} interface FullNameInterface {
public void setFirstName(String f); public void setLastName(String l); public String getFirstName(); public String getLastName();
} class FullNameSimpleNameAdapter implements FullNameInterface {
SimpleName aceObject; String firstName; String lastName; public FullNameSimpleNameAdapter(SimpleName a) { aceObject = a; firstName = aceObject.getName().split(" ")[0]; lastName = aceObject.getName().split(" ")[1]; } public void setFirstName(String f) { firstName = f; } public void setLastName(String l) { lastName = l; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; }
}</source>
Variations on the Adapter pattern.
<source lang="java">
class Programming {
public void code() { } public void debug() { }
} interface ModernProgramming {
void ide();
} class SurrogateAdapter implements ModernProgramming {
Programming programming; public SurrogateAdapter(Programming wih) { programming = wih; } public void ide() { programming.code(); programming.debug(); }
} class DailyJob {
public void work(ModernProgramming wiw) { wiw.ide(); }
} class Coder extends DailyJob {
public void op(Programming wih) { new SurrogateAdapter(wih).ide(); }
} class Coder2 extends Programming implements ModernProgramming {
public void ide() { code(); debug(); }
} class Coder3 extends Programming {
private class InnerAdapter implements ModernProgramming { public void ide() { code(); debug(); } } public ModernProgramming whatIWant() { return new InnerAdapter(); }
} public class AdapterVariations {
public static void main(String args[]) { DailyJob whatIUse = new DailyJob(); Programming whatIHave = new Programming(); ModernProgramming adapt = new SurrogateAdapter(whatIHave); Coder coder = new Coder(); Coder2 coder2 = new Coder2(); Coder3 coder3 = new Coder3(); whatIUse.work(adapt); // Approach 2: coder.op(whatIHave); // Approach 3: whatIUse.work(coder2); // Approach 4: whatIUse.work(coder3.whatIWant()); }
}</source>