Overview

Adapters in SW

Typical working process and Motivation

Example

Simplified Duck and Turkey

public interface Duck {
    public void quack ();
    public void fly ();
}

public class MallardDuck implements Duck {
    public void quack () {
        System.out.println(“Quack”);
    }

    public void fly ( ) {
        System.out.println (“I am flying”);
    }
}

public interface Turkey {
    public void gobble ();
    public void fly ( );
}

public class WildTurkey implements Turkey {
    public void gobble ( ) {
        System.out.println(“Gobble Gobble”);
    }

    public void fly ( ){
        System.out.println(“I’m flying a short distance”);
    }
}

Turkey Adapter

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 ();
    }
}

TestDrive

public class DuckTestDrive {
    public static void main(String[] args) {
        MallardDuck duck = new MallardDuck();
        WildTurkey turkey = new WildTurkey();
        Duck turkeyAdapter = new TurkeyAdapter(turkey);
        System.out.println("The Turkey says...");
        turkey.gobble();
        turkey.fly();

        System.out.println("\nThe Duck says...");
        testDuck(duck);
        System.out.println("\nThe TurkeyAdapter says...");
        testDuck(turkeyAdapter);
    }

    static void testDuck(Duck duck) {
        duck.quack();
        duck.fly();
    }
}

Object Adapter v.s. Class Adapter

diagram
diagram

Implementation Issues

Enumerators v.s. Iterator

Adapting Enumeration to Iterator (EnumerationIterator)

diagram

EnumerationIterator Adapter

public class EnumerationIterator implements Iterator {
    Enumeration enum;

    public EnumerationIterator(Enumeration enum) {
        this.enum = enum;
    }

    public boolean hasNext() {
        return enum.hasMoreElements();
    }

    public Object next() {
        return enum.nextElement();
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}

Summary