package com.corej2eepatterns.dao;

// importy

// abstrakcyjna fabryka DAOFactory
public abstract class DAOFactory {

  // Lista typw DAO obsugiwanych przez fabryk
  public static final int CLOUDSCAPE = 1;
  public static final int ORACLE = 2;
  public static final int SYBASE = 3;
  . . .

  // Dla kadego tworzonego DAO istnieje osobna metoda.
  // Konkretne fabryki bd musiay implementowa te metody. 
  public abstract CustomerDAO getCustomerDAO()
      throws DAOException;
  public abstract EmployeeDAO getEmployeeDAO()
      throws DAOException;
  . . .

  public static DAOFactory getDAOFactory(int whichFactory) {
    switch (whichFactory) {
    case CLOUDSCAPE:
      return new CloudscapeDAOFactory();
    case ORACLE:
      return new OracleDAOFactory();
    case SYBASE:
      return new SybaseDAOFactory();
    . . .
    default: 
      return null;
    }
  }
}