Question: What is an abstract factory?
Answer: A factory for factories.
It is as simple as that.
Guess, you have a family of objects. To get instances from each of the objects, you have to call the appropriate factory.
The disadvantage is obvious: you have to deal with a lot of factories.
So, at this point, the abstract factory comes in to play.
You know, you need some kind of an object, let’s say a connection to a database:
So instead, of straying around in the jungle of factories, you take only one factory, which to tell, what fatory you are looking for, and: There you are!
A simplified Version looks like this:

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx
Is an example of an abstract factory.
Here it is used to retrieve a factory for connections.

