If we have a base class with an abstract getDog() method then getDog is a "factory method." Some derived class will be required to implement the getDog method and return something compatible with Dog.
An abstract factory just has a bunch of abstract getThis, getThat and getTheOther methods for a family of related objects. It usually has nothing else unrelated to getting things. Some derived class will be required to implement the methods and return compatible objects again.
I actually just answered this as a
test so Ilja can tell me if I finally got it right.
What I use most often is a creator thingy that looks a lot like your example. I call them "factories" from pre-GoF habit but it's not true to either pattern. I like to get the mapping of key to class (small -> poodle) from configuration so I never have to touch the code again.
[ November 20, 2006: Message edited by: Stan James ]