An example of the Abstract Factory pattern. : Abstract Factory Pattern « Design Pattern « Java Tutorial






interface Ball {
  void action();
}

interface Player {
  void kick(Ball o);
}

class PlayerA implements Player {
  public void kick(Ball ob) {
    System.out.print("Player A");
    ob.action();
  }
}

class PlayerB implements Player {
  public void kick(Ball ob) {
    System.out.print("Player B");
    ob.action();
  }
}

class BasketBall implements Ball {
  public void action() {
    System.out.println("Hand pass");
  }
}

class Football implements Ball {
  public void action() {
    System.out.println("Foot pass");
  }
}

// The Abstract Factory:
interface AbstractGameFactory {
  Player makePlayer();

  Ball makeObstacle();
}

// Concrete factories:
class BasketBallFactory implements AbstractGameFactory {
  public Player makePlayer() {
    return new PlayerA();
  }

  public Ball makeObstacle() {
    return new BasketBall();
  }
}

class FootballFactory implements AbstractGameFactory {
  public Player makePlayer() {
    return new PlayerB();
  }

  public Ball makeObstacle() {
    return new Football();
  }
}

class Match {
  private Player p;

  private Ball ob;

  public Match(AbstractGameFactory factory) {
    p = factory.makePlayer();
    ob = factory.makeObstacle();
  }

  public void play() {
    p.kick(ob);
  }
}

public class Games {
  public static void main(String args[]) {
    AbstractGameFactory kp = new BasketBallFactory(), kd = new FootballFactory();
    Match g1 = new Match(kp), g2 = new Match(kd);
    g1.play();
    g2.play();
  }
}








34.3.Abstract Factory Pattern
34.3.1.An example of the Abstract Factory pattern.