Mega Code Archive

 
Categories / Java Tutorial / Design Pattern
 

An example of the Abstract Factory pattern

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