By using factory pattern, you are using a subclass to do object creation. Clients only see the superclass and no need to worry what is really created at run time. In abstract pattern, the abstract type creats a family of products. Compared to factory pattern, the abstract factory pattern groups a set of realted products together. You can take it this way, abstract factory pattern is bigger than factory pattern. You can often see methods of an abstract factory are implemented as factory methods.