Hi raj,
yes,
you should avoid to instantiate concrete classes in the code. Creating multiple factories is one way but theres another much simplier approach. You could use some IoC container (Inversion of Control) for injecting the dependancies to the conrete classes into your application.
Take a look at the spring framework.