Design Pattern Java Tutorial

public class MainClass {
  public static void main(String args[]) {
    SecureFactory factory;
    factory = new SecureFactory();
    Connection connection = factory.createConnection("Oracle");
    System.out.println("You're connecting with " + connection.description());
  }
}
class SecureFactory extends ConnectionFactory {
  public Connection createConnection(String type) {
    if (type.equals("Oracle")) {
      return new SecureOracleConnection();
    } else if (type.equals("SQL Server")) {
      return new SecureSqlServerConnection();
    } else {
      return new SecureMySqlConnection();
    }
  }
}
abstract class Connection {
  public Connection() {
  }
  public String description() {
    return "Generic";
  }
}
abstract class ConnectionFactory {
  public ConnectionFactory() {
  }
  protected abstract Connection createConnection(String type);
}
class SqlServerConnection extends Connection {
  public SqlServerConnection() {
  }
  public String description() {
    return "SQL Server";
  }
}
class SecureSqlServerConnection extends Connection {
  public SecureSqlServerConnection() {
  }
  public String description() {
    return "SQL Server secure";
  }
}
class SecureOracleConnection extends Connection {
  public SecureOracleConnection() {
  }
  public String description() {
    return "Oracle secure";
  }
}
class SecureMySqlConnection extends Connection {
  public SecureMySqlConnection() {
  }
  public String description() {
    return "MySQL secure";
  }
}