Re: Enum, switch, and a null
On Sep 10, 4:42 pm, Wojtek <nowh...@a.com> wrote:
Lew wrote :
Wojtek wrote:
switch (Database.getDBType())
{
case MS_SQL:
sql = new SQL_Microsoft( setAutoCommit );
break;
}
return sql;
Another approach is to instantiate a Map <DBType, SQL> to retrieve the
desired SQL (or a Class<? extends SQL>), instantiated from a descriptor or
other resource.
SQL sql = dbMap.get( Database.getDBType() );
So then the get would return an already instantiated class? What about
threading? Would not all threads then get the same instance?
This is part of a Web app. Lots of threads...
Or is dbMap created for each use. That means I would be creating an
extra object (the map), plus an extra object for each DB engine, but
only using one of the engines for the life of the app.
--
Wojtek :-)
Hey, use Hibernate, that'll solve all your problems! :-)
If you change your DBType enum to be an interface or class with the a
method:
abstract SQL getSQLInstance(TransactionCommit setAutoCommit);
class MS_SQL_DBType implements DBType {
public SQL getSQLInstance(TransactionCommit setAutoCommit)
return new SQL_Microsoft( setAutoCommit );
}
}
class MySQL_DBType implements DBType {
public SQL getSQLInstance(TransactionCommit setAutoCommit)
return new SQL_MySSQL( setAutoCommit );
}
}
etc... and so forth.
Add a method to your DBType interface for every switch statement you
currently have.
Does that approach make sense now?